如何使用tifffile与psdtags合并CMYKA与w1通道生成多通道TIFF
合并CMYKA与单通道TIFF文件(含PSD通道标签)
要实现将单通道w1文件合并到CMYKA文件中,生成带正确PSD通道名称的6通道TIFF,你需要同时处理图像通道数据合并和PSD资源标签配置——之前的代码仅配置了资源标签,但未处理核心的图像数据合并与文件写入,因此无法生效。
以下是完整的可行代码:
import numpy as np from tifffile import TiffFile, TiffWriter from psdtags import ( TiffImageResources, PsdFormat, PsdResourceId, PsdVersionBlock, PsdPascalStringsBlock ) # 1. 读取源文件数据 # 读取CMYKA文件(5通道) with TiffFile('cmyka.tif') as tif: cmyka_data = tif.asarray() # 形状应为 (height, width, 5) # 可选:保留原文件TIFF元数据 original_tags = tif.pages[0].tags # 读取w1单通道文件 with TiffFile('w1.tif') as tif: w1_data = tif.asarray() # 形状应为 (height, width) # 校验尺寸匹配 assert cmyka_data.shape[:2] == w1_data.shape[:2], "图像尺寸不匹配" # 2. 合并通道数据 # 将w1通道添加到CMYKA数据末尾,生成6通道数组 merged_data = np.concatenate([cmyka_data, w1_data[..., np.newaxis]], axis=-1) # 3. 配置PSD资源标签(通道名称等) res = TiffImageResources() res.psdformat = PsdFormat.BE32BIT # 添加Photoshop版本信息块 res.blocks.append( PsdVersionBlock( PsdResourceId.VERSION_INFO, version=1, has_real_merges=1, writer_name='Adobe Photoshop', reader_name='Adobe Photoshop 2020', has_transparency=True ) ) # 配置通道名称:顺序需与合并后数据的通道顺序完全对应 channel_names = ["青色", "洋红", "黄色", "黑色", "alpha", "w1"] res.blocks.append( PsdPascalStringsBlock(PsdResourceId.ALPHA_NAMES_PASCAL, values=channel_names) ) res.blocks.append( PsdPascalStringsBlock(PsdResourceId.ALPHA_NAMES_UNICODE, values=channel_names) ) # 4. 写入合并后的TIFF文件 with TiffWriter('cmyka_w1.tif') as tif: tif.write( merged_data, # TIFF核心参数配置 photometric='CMYK', # 指定基础色彩空间为CMYK samplesperpixel=6, # 总通道数:CMYK(4)+Alpha(1)+w1(1) planarconfig='CONTIG', # 通道数据连续存储 # 将PSD资源标签写入TIFF额外标签 extratags=[res.tiff_tag()] )
关键注意事项:
- 图像尺寸校验:必须保证两个源文件的宽高一致,否则无法合并通道数据。
- 通道顺序匹配:PSD通道名称列表的顺序要和合并后数据的通道顺序严格对应,否则Photoshop会显示错误的通道名称。
- 资源标签关联:通过
extratags=[res.tiff_tag()]将配置好的PSD资源标签写入TIFF文件,这是之前代码缺失的核心步骤——仅创建资源但未关联到文件写入,导致标签不生效。
内容的提问来源于stack exchange,提问作者tlxfif
相关产品推荐
相关产品推荐

