pillow 导出 psd 内图层的图片,透明区域本应该是白色却多出一些颜色,请问如何解决

2023-04-06 17:27:48 +08:00
 penll

场景:

psd 内图层是 cmyk 颜色模式,想要保留原本颜色进行导出,这边就用 ImageCms.profileToProfile 转换了下,但是,透明区域可以是白色或保持透明,这边是白色,却会多出一些不应该出现的颜色

错误图片,红色圈部分为多出颜色:

代码如下:


# -- coding:UTF-8 --
from psd_tools import PSDImage
from psd_tools.constants import Resource
from PIL import ImageCms
import os
import configparser

config = configparser.ConfigParser()
config.read("config.ini", encoding="utf-8-sig")
def getConfigValue(section, key):
    return config.get(section, key)

# 打开 PSD 文件
psd = PSDImage.open(getConfigValue("custom", 'psd_path'))

# 指定分组名称
group_name = '组 1'
output_group_folder = 'psd_export_png'
sub_group_name = '人物'

output_icc_profile = './color_icc/AdobeRGB1998.icc'
input_icc_profile = './color_icc/CoatedFOGRA39.icc'

# 遍历所有分组图层
for group in psd._layers:
    if group.is_group() and group.name == group_name:
        # 如果找到指定名称的分组图层,则导出其包含的图层
        os.makedirs(output_group_folder, exist_ok=True)
        for subgroup in group._layers:
            
            if subgroup.is_group() and subgroup.name == sub_group_name:
                for layer in subgroup._layers:
                    print(layer.name)
                    layer_image = layer.composite()
                    
                    # 如果图像是 CMYK 模式,则进行颜色空间转换
                    if layer_image.mode == 'CMYK':
                        layer_image = ImageCms.profileToProfile(layer_image, './color_icc/CoatedFOGRA39.icc', './color_icc/AdobeRGB1998.icc', ImageCms.Intent.RELATIVE_COLORIMETRIC, "RGB")
                    layer_image.save(os.path.join(output_group_folder, f'{layer.name}.png'), format="PNG")

        break
865 次点击
所在节点    Python
1 条回复
penll
2023-04-07 08:48:47 +08:00
有没有懂的大佬,帮忙看下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/930331

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX