我有python代码需要对照片做几件简单的事情:裁剪,调整大小和覆盖水印。我使用了PIL,重新采样/调整大小的结果是可怕的。我使用了imagemagick,界面和命令的设计是将一只猫打包放在一个盒子里,然后反复将它扔到键盘上的一组楼梯上。

我正在寻找一些不是PIL或Imagemagick的东西,我可以使用它来进行简单,高质量的图像转换。就此而言,如果命令行界面良好,它甚至不必具有python绑定。

哦,它需要与平台无关,我们的生产服务器是linux,但我们的一些开发人员在Windows上开发。它也不需要安装一堆愚蠢的gui代码作为库。

有帮助吗?

解决方案

  

我使用了PIL,重新采样/调整大小的结果是可怕的。

他们不应该,只要你:

  1. 仅使用Image.ANTIALIAS过滤进行缩减操作
  2. 仅使用Image.BICUBIC过滤进行升级操作。
  3. 如果使用调色板图像
  4. ,请记住在调整大小之前转换为“RGB”颜色模式
  5. 不要使用.thumbnail()。这是废话
  6. 在保存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模式,而不是调色板颜色,并尝试不同的算法选择。

虽然imagemagick似乎是事实上的开源图像库,但可能是 DevIL (跨平台,似乎做简单的图像操作)或 FreeImage

您检查过 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 开始,大多数问题都是固定的显着提高性能。确保您使用的是最新的枕头

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top