Python成像替代品
-
10-07-2019 - |
题
我有python代码需要对照片做几件简单的事情:裁剪,调整大小和覆盖水印。我使用了PIL,重新采样/调整大小的结果是可怕的。我使用了imagemagick,界面和命令的设计是将一只猫打包放在一个盒子里,然后反复将它扔到键盘上的一组楼梯上。
我正在寻找一些不是PIL或Imagemagick的东西,我可以使用它来进行简单,高质量的图像转换。就此而言,如果命令行界面良好,它甚至不必具有python绑定。
哦,它需要与平台无关,我们的生产服务器是linux,但我们的一些开发人员在Windows上开发。它也不需要安装一堆愚蠢的gui代码作为库。
解决方案
我使用了PIL,重新采样/调整大小的结果是可怕的。
他们不应该,只要你:
- 仅使用Image.ANTIALIAS过滤进行缩减操作
- 仅使用Image.BICUBIC过滤进行升级操作。
- 如果使用调色板图像 ,请记住在调整大小之前转换为“RGB”颜色模式
- 不要使用.thumbnail()。这是废话
- 在保存JPEG时将
quality=
级别设置为适当的级别(默认值非常低)
醇>
其他提示
我不确定为什么Image.thumbnail会出现这样的问题。在目前的版本中,我正在运行它只是找出所需的大小并调整图像的大小。只要您使用正确的重采样过滤器并首先转换为RGB(如bobince所说),缩略图不应与调整大小有任何不同。
以下是缩略图方法的实际来源:
def thumbnail(self, size, resample=NEAREST):
# preserve aspect ratio
x, y = self.size
if x > size[0]: y = max(y * size[0] / x, 1); x = size[0]
if y > size[1]: x = max(x * size[1] / y, 1); y = size[1]
size = x, y
if size == self.size:
return
self.draft(None, size)
self.load()
try:
im = self.resize(size, resample)
except ValueError:
if resample != ANTIALIAS:
raise
im = self.resize(size, NEAREST) # fallback
self.im = im.im
self.mode = im.mode
self.size = size
self.readonly = 0
PIL可以很好地调整大小。确保您的源图像处于RGB模式,而不是调色板颜色,并尝试不同的算法选择。
您检查过 pypi 吗?粗略的搜索显示了一些与图像相关的工具,我也发现了python-gd,但不知道它有多么有用。
我自己从来没有遇到任何PIL问题,但某种变化可能很有趣。
我认为GIMP有一个合理的命令行界面。
看看其中一些成像库:
hxxp://pypi.python.org/pypi/collective.croppingimagefield/0.1beta
hxxp://pypi.python.org/pypi/cropresize/0.1.1
hxxp://pypi.python.org/pypi/image_resize/1.0
上次我比较时,这个缩减器的输出几乎与GIMP的<!>“立方体<!>”相同。选项:
import Image
def stretch(im, size, filter=Image.NEAREST):
im.load()
im = im._new(im.im.stretch(size, filter))
return im
IIRC,差异在视觉上无法区分 - 由于四舍五入,一些像素值+/- 1,并且它们倾向于在边缘处。它也不慢。
cf: http://www.mail-archive的.com /图像-SIG @ python.org / msg00248.html
我使用了PIL,重新采样/调整大小的结果是可怕的。
PIL中的大小调整在很多方面被打破,PIL很长时间没有维护。从 Pillow 2.7 开始,大多数问题都是固定的显着提高性能。确保您使用的是最新的枕头。