读写分层TIFF ImageSourceData和ImageResources标签
项目描述
Psdtags是一个Python库,用于读取和写入Adobe Photoshop(r)特定的ImageResources (#34377)和ImageSourceData (#37724) TIFF标签,这些标签包含在Photoshop创建的典型分层TIFF文件中找到的图像资源块、图层和遮罩信息。
该格式在Adobe Photoshop TIFF技术说明(2002年3月22日)和Adobe Photoshop文件格式规范(2019年11月)中指定。
Adobe Photoshop是Adobe Systems Inc.的注册商标
- 作者:
- 许可证:
BSD 3-Clause
- 版本:
2024.5.24
- DOI:
快速入门
从Python包索引安装psdtags包及其所有依赖项
python -m pip install -U psdtags[all]
查看存储在分层TIFF文件中的图层图像和元数据
python -m psdtags file.tif
查看示例了解如何使用编程接口。
源代码、示例和支持可在GitHub上获取。
需求
此修订版已测试以下需求和相关依赖项(其他版本可能也适用)
CPython 3.9.13, 3.10.11, 3.11.9, 3.12.3
NumPy 1.26.4
Imagecodecs 2024.1.1 (用于压缩/解压缩图像数据所必需)
Tifffile 2024.5.22 (读取/写入 TIFF 文件标签所必需)
Matplotlib 3.8.4 (用于绘图所必需)
修订历史
2024.5.24
修复 GitHub 无法正确渲染 docstring 示例。
2024.2.22
修复读取 PsdBoolean (#10)。
修复 PsdReferencePoint 坐标顺序(破坏性更改)。
允许读取未对齐的 PsdLayer blending_ranges。
2024.1.15
修复多线程问题。
2024.1.8
添加选项以多线程压缩图层通道。
改进日志记录。
放弃对 Python 3.9 和 numpy < 1.23 (NEP29) 的支持。
2023.8.24
修复图层和图案块中的通道数据必须以大端序排列。
2023.6.15
使用 PsdThumbnailFormat 枚举用于 PsdThumbnailBlock.format。
2023.4.30
少量 API 更改(破坏性)。
改进对象表示。
放弃对 Python 3.8 和 numpy < 1.21 (NEP29) 的支持。
2023.2.18
允许未知 PsdKeys (#5)。
2023.2.8
更改 PsdPoint 和 PsdReferencePoint 签名(破坏性)。
添加从图层创建合成的辅助函数。
2022.8.25
更新元数据。
2022.2.11
修复结构填充。
支持 TiffImageResources。
2022.2.2
各种 API 更改(破坏性)。
处理额外的图层信息。
将未知格式的结构作为不可见字节保留。
添加选项以跳过未知格式的标签结构。
添加标签结构的抽象基类。
添加许多结构的类。
2022.1.18
各种 API 更改(破坏性)。
为写入 TiffImageSourceData 修复各种问题。
支持滤镜遮罩。
添加选项以在写入时更改通道压缩。
跳过 ResourceKey 部分时发出警告。
2022.1.14
初始版本。
注意
API 还不稳定,可能在版本之间发生变化。
该库仅针对少量文件进行了测试。
尚未支持额外的图层信息。
考虑使用 psd-tools 和 pytoshop 处理 Adobe Photoshop PSD 文件。
Photoshop、Affinity Photo 和 Krita 可以读取或写入分层 TIFF 文件。
另请参阅 读取和写入 Photoshop TIFF。
示例
从分层 TIFF 文件中读取 ImageSourceData 标签值,并遍历所有通道
>>> isd = TiffImageSourceData.fromtiff('layered.tif') >>> for layer in isd.layers: ... layer.name ... for channel in layer.channels: ... ch = channel.data # a numpy array ... 'Background' 'Reflect1' 'Reflect2' 'image' 'Layer 1' 'ORight' 'I' 'IShadow' 'O'
从 TIFF 文件中读取 ImageResources 标签值,遍历块,并获取缩略图图像
>>> res = TiffImageResources.fromtiff('layered.tif') >>> for block in res.blocks: ... blockname = block.name ... >>> res.thumbnail().shape (90, 160, 3)
将图像、ImageSourceData 和 ImageResources 写入新的分层 TIFF 文件
>>> from tifffile import imread, imwrite >>> image = imread('layered.tif') >>> imwrite( ... '_layered.tif', ... image, ... byteorder=isd.byteorder, # must match ImageSourceData ... photometric='rgb', # must match ImageSourceData ... metadata=None, # do not write any tifffile specific metadata ... extratags=[isd.tifftag(maxworkers=4), res.tifftag()], ... )
验证新分层 TIFF 文件包含可读的 ImageSourceData
>>> assert isd == TiffImageSourceData.fromtiff('_layered.tif') >>> assert res == TiffImageResources.fromtiff('_layered.tif')
从命令行查看分层 TIFF 文件中的图层和遮罩信息以及图像资源块
python -m psdtags layered.tif
有关从单个图层图像创建分层 TIFF 文件的示例,请参阅源分布中的 layered_tiff.py。
项目详情
下载文件
下载适合您平台文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。