首页 > 解决方案 > ImageIO PSD 到 PyQt QImage

问题描述

我正在尝试在 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

标签: pythonpyqtqimagepython-imageio

解决方案


好吧,事实证明这比我想象的要容易。我在这里找到了答案: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

推荐阅读