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 成像替代品的主要内容,如果未能解决你的问题,请参考以下文章