You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用psd-tools为PSD图层添加PIL格式图像蒙版?寻求带可编辑蒙版的替代文件格式方案

解决PSD图层蒙版添加问题 & 替代格式方案

我来帮你搞定这个需求!你用psd-tools的思路是对的,只是没找对给图层绑定蒙版的正确方式,另外也给你分享下TIFF格式的替代方案,毕竟它是开源且支持可编辑蒙版的。

一、用psd-tools给PSD图层添加蒙版

psd-tools的Mask类确实支持直接传入PIL图像,但需要注意几个关键点:

  • 蒙版必须是8位灰度模式('L'),这是PSD蒙版的标准要求;
  • PSDImage.frompil()创建的PSD默认只有一个图层,你需要先获取这个图层再绑定蒙版。

修正后的代码如下:

from PIL import Image
from psd_tools import PSDImage
from psd_tools.api.mask import Mask

# 加载并预处理图像:源图转RGB,蒙版转灰度
source = Image.open('source.png').convert('RGB')
mask_img = Image.open('mask.png').convert('L')

# 从源图生成PSD(默认包含单个图层)
psd = PSDImage.frompil(source)
target_layer = psd[0]  # 获取PSD里的唯一图层

# 创建蒙版实例并绑定到图层
target_layer.mask = Mask(image=mask_img)

# 保存带蒙版的PSD
psd.save('img_with_mask.psd')

这样生成的PSD在Photoshop里打开时,图层会带有你导入的黑白蒙版,完全可编辑。

二、替代方案:用TIFF格式保存可编辑蒙版

TIFF是开源的图像格式,几乎所有专业图像编辑软件都支持它的图层和蒙版特性,有两种实用方式:

1. 将蒙版作为Alpha通道保存

这种方式最简便,把蒙版直接作为源图像的透明通道,保存后的TIFF在软件里可以直接编辑Alpha通道(等同于蒙版):

from PIL import Image

source = Image.open('source.png').convert('RGB')
mask_img = Image.open('mask.png').convert('L')

# 把蒙版添加为源图的Alpha通道
source.putalpha(mask_img)

# 保存带Alpha的TIFF(用LZW压缩减小文件体积)
source.save('img_with_alpha.tif', format='TIFF', compression='LZW')

2. 保存带独立图层蒙版的TIFF

如果需要保留独立的图层和蒙版(不合并成Alpha),可以用pytiff库来创建分层TIFF(先通过pip install pytiff安装库):

import pytiff

source = Image.open('source.png').convert('RGB')
mask_img = Image.open('mask.png').convert('L')

# 创建支持分层的TIFF文件
with pytiff.Tiff('layered_mask.tif', mode='w') as tif:
    # 添加源图像图层
    tif.write(source, photometric='RGB')
    # 添加蒙版图层(标记为蒙版类型)
    tif.write(mask_img, photometric='MINISBLACK', extra_samples=1)

这种分层TIFF在Photoshop或GIMP中打开时,蒙版会作为独立的图层蒙版存在,完全可编辑。

内容的提问来源于stack exchange,提问作者Felox

火山引擎 最新活动