Python 成像替代品

Posted

技术标签:

【中文标题】Python 成像替代品【英文标题】:Python imaging alternatives 【发布时间】:2010-11-29 08:14:00 【问题描述】:

我有 python 代码,只需要对照片做几件简单的事情:裁剪、调整大小和覆盖水印。我用过 PIL,重新采样/调整大小的结果很糟糕。我用过imagemagick,界面和命令的设计是把一只猫装在盒子里,然后用键盘反复把它扔下一组楼梯。

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

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

【问题讨论】:

你会看到一段时间。 PyMagick 是除了 PIL 之外唯一的东西。 人们如何认为 PIL 可以接受?任何调整大小的操作(甚至是下采样)都会产生伪影和模糊,即使使用 ANTIALIAS 重采样设置也是如此。我已经尝试了几个小时让它产生我可以接受的结果,但与 Photoshop 或 GIMP 等桌面工具相比,PIL 的大小调整是可悲的。 我使用 resize with antialias 来生成文档生成应用程序的缩略图,它们与 acrobat pdf 查看器的功能相当 【参考方案1】:

我用过 PIL,重新采样/调整大小的结果很糟糕。

他们不应该是,只要你:

    仅对缩小操作使用 Image.ANTIALIAS 过滤 仅使用 Image.BICUBIC 过滤进行放大操作。 如果您使用调色板图像,请记住在调整大小之前转换为“RGB”颜色模式 不要使用 .thumbnail()。太垃圾了 在保存 JPEG 时将quality= 级别设置为适当的值(默认值很低)

【讨论】:

你知道,经过一些进一步的测试,结果比缩略图更好,即使两者都使用 Image.ANTIALIAS 算法。如果我以后想到它,我会发布一些各种操作的示例结果。 参见***.com/questions/1386400/… — 它并不能完全测试 like 与 like 但显然 thumbnail() 所做的事情有很大问题。 只是想强调第 5 点。很容易忽略,这也是这个问题最初抱怨的问题的主要原因。【参考方案2】:

我不确定为什么 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

【讨论】:

【参考方案3】:

PIL 可以很好地调整大小。确保您的源图像处于 RGB 模式,而不是调色板颜色,并尝试不同的算法选择。

【讨论】:

我一直在普通 ol' JPEG 上使用它。 Image.open('myfile.jpg'),然后是 Image.thumbnail 或 Image.resize,然后是 Image.save... 全部使用 ANTIALIAS 设置进行下采样。默认情况下应该处于 RGB 模式(jpeg 是 RGB)并且具有最佳的下采样算法,对吧?如果我遗漏了什么,我很想知道我做错了什么...... 没有看到源代码和源图像,很难说发生了什么。许多人使用 PIL 进行此类工作,并对结果感到满意。你的情况有些不同(你的眼睛特别鹰吗?),但我们还没有弄清楚。【参考方案4】:

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

【讨论】:

【参考方案5】:

你检查过pypi吗?粗略搜索了一些与图像相关的工具,我还发现了 python-gd,但不知道它有多大用处。

我自己从来没有遇到过 PIL 的任何问题,但某种多样性可能会很有趣。

【讨论】:

【参考方案6】:

我认为 GIMP 有一个合理的命令行界面。

【讨论】:

不幸的是 GIMP 需要 GTK+,这是一个安装在无头服务器上的相当愚蠢的库。【参考方案7】:

看看其中一些图像库:

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

【讨论】:

【参考方案8】:

我用过 PIL,重新采样/调整大小的结果很糟糕。

PIL 中的调整大小在许多方面都被破坏了,PIL 很长时间没有维护。从Pillow 2.7 开始,大多数问题都得到了解决,性能也得到了显着提升。确保您使用的是latest Pillow。

【讨论】:

【参考方案9】:

我上次比较时,这个降频器的输出几乎与 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/image-sig@python.org/msg00248.html

【讨论】:

以上是关于Python 成像替代品的主要内容,如果未能解决你的问题,请参考以下文章

TOF摄像机可以替代Flash激光雷达吗?

python:匿名函数的替代品

Python3 上是不是有 Ansible 的替代品

Python - time.sleep 的替代品

用于命令行应用程序的 thor (ruby) 的 python 替代品是啥? [关闭]

python libtorrent有啥替代品吗?