python - 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
解决方案
好吧,事实证明这比我想象的要容易。我在这里找到了答案: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
推荐阅读
- fiware - Fiware orion 订阅发送空体
- java - 在java(cmd程序)中使用bufferedreader的单字符串循环用户输入设置延迟
- jquery - Jquery最接近没有用replace定义
- ios - 是否可以将手势识别器附加到按钮,以便用户在按下按钮之后/期间向上滑动?
- php - Laravel 使用 vendor 目录 php 类
- php - PHPMailer没有发送一些电子邮件
- javascript - 检查未定义“值”的方法
- c# - Entity Framework Core 中的条件导航属性
- matrix - 在 Julia 的矩阵中找到最大值的位置
- node.js - 如何删除 apiconnect 路径上的安全要求?