Python 3的图像库

Python-3使用什么代替 PIL 来操作图像?

176335 次浏览

截至2012年3月30日,我已经尝试过让 GitHub 上的 loonz fork 打开图像,但是失败了。我把它编译好了,但实际上没有工作。我也尝试建立 Gohlke 的图书馆,它也编译,但未能打开任何图像。有人在上面提到了 Python Magick,但它只能在 Windows 上编译。参见 WxPython wiki 上的 Python Magick

PIL 最近一次更新是在2009年,虽然它的网站上说他们正在开发一个 Python 3端口,但是已经过去3年了,而且邮件列表已经变冷了。

为了解决 Python3图像操作问题,我使用 subprocess.call()来执行 ImageMagick shell 命令。这种方法是有效的。

参见 子流程模块文档

Christoph Gohlke 设法为3.3: http://www.lfd.uci.edu/~gohlke/pythonlibs/以下的 Python 版本构建 PIL (仅适用于 Windows)

我用 Python 3.2尝试了他的 PIL 版本,图像打开/创建/像素操作/保存所有工作。

您可以在 Python3上使用我的包 Mahotas,它是基于 numpy 而不是基于 PIL 的。

Qt 与图形工作得非常好。在我看来,它比 PIL 更通用。

您可以获得所有您想要的图形操作特性,但是还有矢量图形,甚至支持真正的打印机。所有这些都在一个统一的 API,强 > QPainter中。

要使用 Qt,需要一个 Python 绑定: < strong > PySide < strong > PyQt4
它们都支持 Python 3。

下面是一个简单的例子,它加载一个 JPG 图像,在坐标 (20,20)处绘制一个半径为 10的反锯齿圆,使用在这些坐标处的像素的颜色,然后将修改后的图像保存为 PNG 文件:

from PySide.QtCore import *
from PySide.QtGui import *


app = QCoreApplication([])


img = QImage('input.jpg')


g = QPainter(img)
g.setRenderHint(QPainter.Antialiasing)
g.setBrush(QColor(img.pixel(20, 20)))
g.drawEllipse(QPoint(20, 20), 10, 10)
g.end()


img.save('output.png')

但是请注意,这个解决方案相当“重量级”,因为 Qt 是一个用于制作 GUI 应用程序的大型框架。

“友好的 PIL 叉”枕头可以在 Python 2和 Python 3上使用。检查支持矩阵的 Github 项目等。

你想要 译自: 美国《科学》杂志网站(http://python-Pillow.org/),以下是如何在 Python 3上安装它:

pip3 install Pillow

如果这对你不起作用(它应该起作用) ,试试正常的 pip:

pip install Pillow

根据需要,Scikit-image可能是最佳选择,操作远远超出 PIL 和当前版本的枕头。保养得很好,至少和枕头差不多。而且,底层的数据结构来自 Numpy 和 scypy,这使得它的代码具有难以置信的互操作性。枕头不能处理的例子:

Region Adjacency Graph Merging

Radon Transform

Histogram of oriented gradients

Approximate and subdivide polygons

你可以看到它的力量在 画廊这张纸提供了一个伟大的介绍它。祝你好运!

If you are on Python3 you can also use the library PILasOPENCV which works in Python 2 and 3. Function api calls are the same as in PIL or pillow but internally it works with OpenCV and numpy to load, save and manipulate images. Have a look at https://github.com/bunkahle/PILasOPENCV or install it with pip install PILasOPENCV. Not all PIL functions have been simulated but the most common functions work.