You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 21:22:42