如何用Python生成可被Photoshop识别为分层的多层TIFF?
我懂你遇到的问题了——想把多张图堆叠成Photoshop能识别为独立图层的TIFF,但普通多页TIFF和用Pillow默认方法保存的文件,在PS里只能看到单个图层对吧?这是因为常规多页TIFF不带Photoshop需要的图层元数据,PS只会把它当成单图层的分页文件,而不是分层图像。
给你两个实用的解决方案,看你需求选:
方案1:用psd-tools生成PSD(跨平台,无需Photoshop)
PSD是Photoshop原生格式,完美支持图层,我们可以先把图片做成PSD,之后在PS里导出为带图层的TIFF就行,步骤很简单:
首先安装依赖:
pip install psd-tools[all]
然后用下面的代码生成带图层的PSD:
from psd_tools import PSDImage, Layer from PIL import Image import glob # 遍历所有图片文件 file_list = glob.glob("photos/*") psd_layers = [] for img_path in file_list: # 打开图片并转成RGB格式(PSD对RGB支持最好) img = Image.open(img_path).convert("RGB") # 把PIL图片转成PSD图层 layer = Layer.frompil(img) # 给图层命名,方便在PS里识别 layer.name = img_path.split("/")[-1] psd_layers.append(layer) # 创建新的PSD文档,尺寸用第一张图的大小,背景设为白色(可按需调整) psd = PSDImage.new(psd_layers[0].size, color=(255, 255, 255)) # 添加所有图层到PSD for layer in psd_layers: psd.append(layer) # 保存PSD文件 psd.save("layered_image.psd") print("PSD文件已生成!打开后直接在PS里选「文件-存储为」,格式选TIFF,勾选「保留图层」就能导出带图层的TIFF了")
方案2:用Python调用Photoshop API直接生成带图层的TIFF(仅Windows,需安装PS)
如果需要完全自动化,不想手动转格式,且你用的是Windows系统、安装了Photoshop,可以用pywin32调用PS的COM接口来直接生成带图层的TIFF:
先安装依赖:
pip install pywin32
然后运行这段代码:
import win32com.client import glob # 启动Photoshop应用 ps_app = win32com.client.Dispatch("Photoshop.Application") ps_app.Visible = True # 让PS窗口显示出来,方便查看过程 # 获取第一张图片的尺寸,作为新文档的大小 first_img_path = glob.glob("photos/*")[0] temp_doc = ps_app.Open(first_img_path) new_doc = ps_app.Documents.Add(temp_doc.Width, temp_doc.Height, temp_doc.Resolution, "Layered TIFF") temp_doc.Close() # 逐个将图片添加为图层 for img_path in glob.glob("photos/*"): # 打开图片文档 img_doc = ps_app.Open(img_path) # 复制当前图层到新文档 img_doc.ActiveLayer.Copy() new_doc.Paste() # 给图层命名 new_doc.ActiveLayer.Name = img_path.split("\\")[-1] # Windows路径用反斜杠分割 img_doc.Close() # 设置TIFF保存选项,开启保留图层功能 save_options = win32com.client.Dispatch("Photoshop.TiffSaveOptions") save_options.Layers = True save_options.EmbedColorProfile = True # 保存带图层的TIFF new_doc.SaveAs("test_layered.tiff", save_options) new_doc.Close() print("带图层的TIFF已直接生成完成!")
为啥之前的方法不行?
你之前用Pillow保存的多页TIFF,本质是把图片按顺序存成TIFF的不同页码,但Photoshop不会把页码识别成图层——它需要的是带有Photoshop图层元数据的特殊TIFF结构,而Pillow默认不支持写入这种元数据,所以只能看到单个图层。
内容的提问来源于stack exchange,提问作者Vkitor




