跳转到主要内容

读写分层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.的注册商标

作者:

Christoph Gohlke

许可证:

BSD 3-Clause

版本:

2024.5.24

DOI:

10.5281/zenodo.7879187

快速入门

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-toolspytoshop 处理 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

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

psdtags-2024.5.24.tar.gz (41.1 kB 查看散列)

上传于 来源

构建分发

psdtags-2024.5.24-py3-none-any.whl (30.9 kB 查看哈希值)

上传于 Python 3

由以下提供支持