Python图像处理替代方案

10 投票
9 回答
10461 浏览
提问于 2025-04-15 14:24

我有一段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,结果缩放的效果糟透了。

其实不应该这样,只要你注意以下几点:

  1. 缩小图片时,只用Image.ANTIALIAS这个过滤器。
  2. 放大图片时,只用Image.BICUBIC这个过滤器。
  3. 如果你用的是调色板图片,记得在缩放前先转换成'RGB'颜色模式。
  4. 别用.thumbnail(),效果很差。
  5. 保存JPEG图片时,设置quality=为合适的值(默认值比较低)。

撰写回答