如何在PyQt中以“JPEG”格式保存QImage?

3

我的平台是 Windows7, Python3.4, PyQt5

我发现无法以 jpeg 格式保存 QImage 对象。

>>> from PyQt5 import QtCore, QtGui
>>> i = QtGui.QImage()
>>> i.load(r"C:\Users\paleneutron\Pictures\Capture4.PNG")
True
>>> i.save(r"C:\Users\paleneutron\Pictures\hehe.jpg")
False
>>> i.save(r"C:\Users\paleneutron\Pictures\hehe.jpg",format = 'jpeg')
False
>>> i.save('hehe.png')
True
>>> i.save('hehe.bmp')
True
>>> i.save('hehe.jpg')
False
>>> i.save('hehe.jpeg')
False

这个页面中,jpeg支持读和写两种操作。
为什么我执行时会得到false?

编辑

我已经检查了支持的格式,如下所示:
>>> QtGui.QImageWriter.supportedImageFormats()
[PyQt5.QtCore.QByteArray(b'bmp'), PyQt5.QtCore.QByteArray(b'pbm'), PyQt5.QtCore.QByteArray(b'pgm'), PyQt5.QtCore.QByteArray(b'png'), PyQt5.QtCore.QByteArray(b'ppm'), PyQt5.QtCore.QByteArray(b'xbm'), PyQt5.QtCore.QByteArray(b'xpm')]

问题出在这里,jpeg文件缺失!但是我在 C:\Python34\Lib\site-packages\PyQt5\plugins\imageformats找到了qjpeg.dll 文件。我该怎么做才能在我的程序中启用jpeg呢?

3
首先请查看此链接:http://doc.qt.io/qt-5/qimagewriter.html#supportedImageFormats 其次,对于jpg格式的图片,Qt需要特殊的jpg插件(在部署应用程序时,它应该位于imageformats目录中)。 - Jablonski
你是在尝试部署exe文件吗?还是在部署Linux应用程序?或者你只是在IDE中编写代码时处于调试模式? - Jablonski
@Chernobyl,我觉得很荒谬,居然要部署exe才能使用PyQt的功能。但是我偶然间找到了解决方案。我在下面写出了解决方案。 - PaleNeutron
抱歉,我不懂Python :) 只会C++和Qt,但在这些领域的知识有时可以让我为Python+Qt提供好的答案。很高兴你找到了解决方案,所以我点赞了答案和问题 :) - Jablonski
1个回答

6

谢谢切尔诺贝利!

我偶然找到了解决方案。

我在我的完整程序中尝试了测试代码,它可以很好地工作。这是因为PyQt的许多功能在使用之前必须构建一个QGuiApplication

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
print(QtGui.QImageWriter.supportedImageFormats())

现在我们支持的格式如下:

[PyQt5.QtCore.QByteArray(b'bmp'), PyQt5.QtCore.QByteArray(b'ico'), PyQt5.QtCore.QByteArray(b'jpeg'), PyQt5.QtCore.QByteArray(b'jpg'), PyQt5.QtCore.QByteArray(b'pbm'), PyQt5.QtCore.QByteArray(b'pgm'), PyQt5.QtCore.QByteArray(b'png'), PyQt5.QtCore.QByteArray(b'ppm'), PyQt5.QtCore.QByteArray(b'tif'), PyQt5.QtCore.QByteArray(b'tiff'), PyQt5.QtCore.QByteArray(b'wbmp'), PyQt5.QtCore.QByteArray(b'xbm'), PyQt5.QtCore.QByteArray(b'xpm')]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接