纯Python工具,用于处理所有标签和IFD。
项目描述
纯Python工具,用于读取和写入所有TIFF IFD、子IFD和标签。
由Kitware, Inc.开发,并获得美国国家癌症研究所资助。
示例
import tifftools
info = tifftools.read_tiff('photograph.tif')
info['ifds'][0]['tags'][tifftools.Tag.ImageDescription.value] = {
'data': 'A dog digging.',
'datatype': tifftools.Datatype.ASCII
}
exififd = info['ifds'][0]['tags'][tifftools.Tag.EXIFIFD.value]['ifds'][0][0]
exififd['tags'][tifftools.constants.EXIFTag.FNumber.value] = {
'data': [54, 10],
'datatype': tifftools.Datatype.RATIONAL
}
tifftools.write_tiff(info, 'photograph_tagged.tif')
命令
tifftools --help 和 tifftools <command> --help 提供使用详情。
tifftools split [--subifds] [--overwrite] source [prefix]:将tiff文件拆分为单独的文件。这也可以作为库函数 tifftools.tiff_split 使用。
tifftools concat [--overwrite] source [source ...] output:将多个tiff文件合并在一起。别名: tifftools merge。这也可以作为库函数 tifftools.tiff_concat 使用。
tifftools dump [--max MAX] [--json] source [source ...]:打印关于tiff文件的信息,包括所有标签、IFD和子IFD。别名: tifftool info。这也可以作为库函数 tifftools.tiff_dump 使用。
tifftools set source [--overwrite] [输出] [--set TAG[:DATATYPE][,<IFD-#>] 值] [--unset TAG:[,<IFD-#>]] [--setfrom TAG[,<IFD-#>] TIFFPATH]:修改、添加或删除标签。这也可以作为库函数tifftools.tiff_set使用。
库函数
read_tiff
write_tiff
常量
标签
数据类型
get_or_create_tag
EXIF标签、GPS标签等。
安装
tifftools 可在 PyPI 和 conda-forge 上获取。
使用 pip 从 PyPI 安装
pip install tifftools
使用 conda 安装
conda install -c conda-forge tifftools
目的
tifftools 提供了一个库和命令行程序,用于操作 TIFF 文件。它可以拆分多个图像,合并图像,设置任何 IFD 中的任何标签,并使用单个命令转储所有 IFD 和标签。它只使用 Python 标准库模块,因此具有广泛的兼容性。
理由
需要将多个 TIFF 文件中的图像合并,而不改变图像数据或丢失任何标签信息。此外,在更改标签值时,必须完全从输出中删除旧值。
与 libtiff 相关的命令行工具通常用于类似目的。libtiff 命令工具存在重大限制:tiffdump 和 tiffinfo 需要多个命令才能查看所有 IFD 的信息。 tiffset 不会从文件中删除数据;相反,它将数据附加到文件中以仅引用新数据,而旧值仍然在文件中。 tiffsplit 不会保留它不识别的标签,从而丢失数据。 tiffcp 总是重新编码图像,并且对于它不认识的压缩类型将失败。
同样,存在大量的 EXIF 工具。大多数情况下,这些工具仅更改标签,通常是通过将它们附加到现有文件中。
许多程序同时处理经典和 BigTIFF。有些程序将开始写入经典 TIFF,但在文件头之后留下一小部分未使用空间。如果文件超过 4Gb,文件的部分将重写以将其转换为 BigTIFF 文件,从而在文件中留下少量废弃数据。
tifftools 满足这一需求。所有标签都复制,即使未知。文件始终重写,以确保文件中 never 有废弃数据。 tifftools dump 显示有关所有 IFD 和标签的信息。许多命令行选项直接受 libtiff 启发。
tifftools 不会压缩或解压缩任何图像数据。这不是一个图像查看器。如果您需要重新压缩图像或以其他方式操作像素数据,请使用 libtiff 或其他库。
作为一个明确的例子,使用 libtiff 的 tiffset,标签数据只是取消引用,仍然在文件中
$ grep 'secret' photograph.tif || echo 'not present'
not present
$ tiffset -s ImageDescription "secret phrase" photograph.tif
$ tiffinfo photograph.tif | grep ImageDescription
ImageDescription: secret phrase
$ grep 'secret' photograph.tif || echo 'not present'
Binary file photograph.tif matches
$ tiffset photograph.tif -s ImageDescription "public phrase"
$ tiffinfo photograph.tif | grep ImageDescription
ImageDescription: public phrase
$ grep 'secret' photograph.tif || echo 'not present'
Binary file photograph.tif matches
而使用 tifftools
$ grep 'secret' photograph.tif || echo 'not present'
not present
$ tifftools set -y -s ImageDescription "secret phrase" photograph.tif
$ tiffinfo photograph.tif | grep ImageDescription
ImageDescription: secret phrase
$ grep 'secret' photograph.tif || echo 'not present'
Binary file photograph.tif matches
$ tifftools set -y photograph.tif -s ImageDescription "public phrase"
$ tiffinfo photograph.tif | grep ImageDescription
ImageDescription: public phrase $ grep 'secret' photograph.tif || echo
'not present' not present
TIFF 文件结构
TIFF 文件由一个或多个 IFD(图像文件目录)组成。这些可以位于文件中的任何位置,并按其在文件中的绝对位置引用。IFD 可以引用图像数据;它们还可以包含一组元数据(例如,EXIF 或 GPS 数据)。小型数据值直接存储在 IFD 中。较大的数据值(如图像数据、较长的字符串或数字列表)由 IFD 引用,并存储在文件的其他位置。
在简单的情况下,一个 TIFF 文件可能有一个 IFD 列表,每个 IFD 都引用下一个。但是,复杂的 TIFF 文件(如某些 Whole-Slide Image(WSI)显微镜系统使用的文件)可以有 IFD 组织成分支结构,其中一些 IFD 是列表,而一些则引用包含更多图像的 SubIFD。
TIFF文件的主要数据可以存储为小端或大端格式。数据偏移量在TIFF文件中存储为绝对数值。有两种变体:“经典”和“BigTIFF”,分别使用32位和64位来存储这些偏移量。如果文件大小超过4Gb或使用64位整数数据类型,则必须以BigTIFF格式写入。
限制
未知标签是偏移量,且数据类型不是IFD或IFD8,将无法正确复制,因为无法区分具有LONG或LONG8数据类型的整数数据和偏移量。这可以通过定义一个新的TiffConstant记录来修复,该记录包含一个bytecounts条目,以指示偏移量是否指向固定长度数据或应从另一个标签获取数据长度。
由于文件始终会被重写,tifftools比libtiff的tiffset和大多数EXIF工具要慢。
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪一个,请了解有关安装包的更多信息。
源代码发行版
构建发行版
tifftools-1.5.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a7d7e001191d6813c1ae05f4b58485e646d4de36b5e16575b1c869a7c3a21bbb |
|
MD5 | 3032fd2df5ec5d22ea3b42bc0f44fee7 |
|
BLAKE2b-256 | cc15e902583d3353a3a316ede3e831fc4383b39f97d99a000c7d5d0f2da112dc |
tifftools-1.5.2-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | fcfef4a032459c702b0ef628c1e56b03a3fe9ca953caab48bc54958bc0ac4361 |
|
MD5 | b40495c8a39565b03b2068d750a13a30 |
|
BLAKE2b-256 | 23d3266e38f9b4e55e5a8d79d2f2e77544eebeed55a2a1dea053f13e17be0231 |