Python图像处理替代方案
我有一段Python代码,需要对照片做几件简单的事情:裁剪、调整大小和加水印。我试过用PIL,但调整大小的效果非常糟糕。我也试过imagemagick,结果发现它的界面和命令就像是把一只猫装进盒子里,然后把盒子扔下楼梯再让它在键盘上乱按。
我想找一个不是PIL或Imagemagick的工具,可以用Python来做简单又高质量的图像处理。其实,如果命令行界面好用的话,它甚至不需要有Python的接口。
哦,对了,它还需要比较跨平台,我们的生产服务器是Linux,但有些开发人员是在Windows上开发的。而且,它不能需要安装一堆无聊的图形界面代码来作为库使用。
9 个回答
1
PIL可以很好地调整图片大小。确保你的源图片是RGB模式,而不是调色板颜色,并尝试不同的算法选项。
2
我不太明白为什么大家对Image.thumbnail这个功能有这么多抱怨。在我现在用的版本里,它的作用其实就是确定想要的大小,然后直接调整图片的大小。只要你使用合适的重采样过滤器,并且先转换成RGB格式(就像bobince说的那样),thumbnail的效果和resize其实是差不多的。
下面是thumbnail方法的实际代码:
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
18
我用过PIL,结果缩放的效果糟透了。
其实不应该这样,只要你注意以下几点:
- 缩小图片时,只用Image.ANTIALIAS这个过滤器。
- 放大图片时,只用Image.BICUBIC这个过滤器。
- 如果你用的是调色板图片,记得在缩放前先转换成'RGB'颜色模式。
- 别用.thumbnail(),效果很差。
- 保存JPEG图片时,设置
quality=
为合适的值(默认值比较低)。