问题描述
我正在尝试在 PyQt 中显示 Photoshop 图像。我一直在使用 python imageio 模块来加载图像,并通过一系列步骤将它们转换为 QImage,如下所示。这适用于许多不同的内容,例如 .exr、.hdr 等。但是,在尝试加载 .psd 时,我得到了奇怪的结果,例如到处都是彩虹色和很多噪音。转换过程中似乎出了点问题,但我无法从 FreeImage、ImageIO 或 PIL 在线找到足够的文档来解释问题所在。
这是我正在使用的转换过程的一个简单示例:
import os
from PIL import Image
from PyQt5 import QtGui
import imageio,numpy
path = 'path/to/image.psd'
imio = imageio.imread(path)
imio_np = numpy.uint8(imio) # convert from 16bpc to 8bpc
im = Image.fromarray(imio_np)
im.convert('RGB')
data = im.tobytes('raw','RGB')
qim = QtGui.QImage(data,im.size[0],im.size[1],QtGui.QImage.Format_RGB888)
# then just apply that qim to a QLabel
解决方法
好吧,事实证明这比我想象的要容易。我在这里找到了答案:Convert 16-bit Tiff image to 8-bit RGB。问题只是从 16bpc 转换为 8bpc,我会在这里发布,以防其他人遇到此问题。
import os
from PIL import Image
from PyQt5 import QtGui
import imageio,numpy
path = 'path/to/image.psd'
imio = imageio.imread(path)
if imio.dtype == 'uint16': # 16bpc
imio = (imio >> 8).astype('uint8') # convert to 8bp with a bit-shift
im = Image.fromarray(imio)
im.convert('RGB')
data = im.tobytes('raw','RGB')
qim = QtGui.QImage(data,im.size[0],im.size[1],QtGui.QImage.Format_RGB888)
# then just apply that qim to a QLabel