PIL 可以使用 pyqt4 资源文件打开图像吗?

Posted

技术标签:

【中文标题】PIL 可以使用 pyqt4 资源文件打开图像吗?【英文标题】:can PIL open an image using pyqt4 resource file? 【发布时间】:2012-12-13 01:28:51 【问题描述】:

PIL可以用pyqt4资源文件打开图片吗?

from PIL import Image, ImageWin
import res_rc #resource file

image = Image.open(":/images/image.png")
dim = ImageWin.Dib(image)

我收到了这个错误

IOError: [Errno 22] invalid mode ('rb') or filename :/images/image.png'

【问题讨论】:

你能得到一个类似文件的资源数据吗? 我也不知道。如果可能的话,我只想将图像放入 pyqt4 资源文件,而不是将其分离到图像文件中。因此用户无法编辑或删除图像文件。 如果你能得到一个类似文件的文件就很容易了,所以先做吧。 你的字面意思是来自资源文件,还是来自资源对象代码?如果是前者,则只需解析 XML 文件即可。如果是后者,您可以访问 PyQt 模块,因此使用 QPixMap 加载资源并将其转换为与 PIL 一起使用。 【参考方案1】:

要从资源中读取图像文件,请使用 QFile 打开它并将原始数据传递给 PIL 可以使用的类文件对象:

from PyQt4.QtCore import QFile
from cStringIO import StringIO
from PIL import Image, ImageWin
import res_rc

stream = QFile(':/images/image.png')
if stream.open(QFile.ReadOnly):
    data = stream.readAll()
    stream.close()
    image = Image.open(StringIO(data))
    dim = ImageWin.Dib(image)

请注意,资源被设计为编译到应用程序中,因此它们是严格只读的。

【讨论】:

以上是关于PIL 可以使用 pyqt4 资源文件打开图像吗?的主要内容,如果未能解决你的问题,请参考以下文章

从字节文件打开 PIL 图像

提交带有表格的图像时需要Django Pillow或Pil吗?

Pillow

Pillow

使用 PIL 从图像中获取像素

PyQt4 - QWidget 另存为图像