使用Wand堆叠PNG生成PSD时颜色转为灰度的问题求助
PNG转PSD颜色变灰度问题解决方案
问题重现
使用以下代码将多个彩色PNG堆叠为PSD文件时,生成的PSD所有图层均变为灰度(原始PNG为彩色):
from wand.image import Image with Image(filename="base.png") as img: img.read(filename="background.png") img.read(filename="image.png") img.read(filename="sub_box.png") img.read(filename="cta_box.png") img.read(filename="sub_text.png") img.read(filename="cta_text.png") img.save(filename="final.psd")
已尝试修改image.format为psd、检查image.colorspace,问题未解决。
核心原因
Wand的img.read()方法在添加图层时,会自动将读取的图像适配当前基础图像的颜色空间。如果初始的base.png是灰度模式,后续所有彩色图层都会被强制转换为灰度;即使base.png是彩色,若读取过程中颜色空间被意外切换,也会导致该问题。
可行解决方案
方法1:确保基础图像及所有图层为彩色模式
修改代码,显式将基础图像和每个图层转换为RGB彩色空间后再添加:
from wand.image import Image with Image(filename="base.png") as base_img: # 将基础图像转为SRGB彩色模式 if base_img.colorspace == 'gray': base_img.transform_colorspace('srgb') # 遍历所有图层文件 layer_paths = [ "background.png", "image.png", "sub_box.png", "cta_box.png", "sub_text.png", "cta_text.png" ] for path in layer_paths: with Image(filename=path) as layer: # 确保图层为彩色模式 if layer.colorspace == 'gray': layer.transform_colorspace('srgb') # 将图层添加到序列中 base_img.sequence.append(layer) # 保存为PSD base_img.save(filename="final.psd")
方法2:直接创建彩色PSD容器
如果不需要基于base.png初始化,可直接创建一个空白的彩色图像作为容器,再添加图层:
from wand.image import Image # 创建空白SRGB彩色图像(尺寸可根据实际需求调整) with Image(width=800, height=600, colorspace='srgb') as psd_container: layer_paths = [ "base.png", "background.png", "image.png", "sub_box.png", "cta_box.png", "sub_text.png", "cta_text.png" ] for path in layer_paths: with Image(filename=path) as layer: if layer.colorspace == 'gray': layer.transform_colorspace('srgb') psd_container.sequence.append(layer) psd_container.save(filename="final.psd")
相关文档参考(翻译自Wand 0.6.13官方文档)
- Image.read() 方法:读取额外图像并添加到当前图像序列(作为PSD图层)。读取的图像会自动适配当前图像的颜色空间、尺寸等属性,这是导致彩色图层被转灰度的关键因素。
- colorspace 属性:标识图像的颜色空间,支持'srgb'(标准RGB)、'gray'(灰度)等取值。基础图像的颜色空间会被所有后续添加的图层继承。
- transform_colorspace() 方法:将图像转换为指定的颜色空间,可用于将灰度图像转换为彩色模式,确保图层颜色信息不丢失。
内容的提问来源于stack exchange,提问作者sefecesence
相关产品推荐
相关产品推荐

