如何在 tiff 文件中读取/写入“每个样本位数”ifd 标记(python)

问题描述 投票:0回答:1

我正在努力解决“每个样本位数”的 IDF 标签。根据文档,该字段的类型是

short

Code    258 (hex 0x0102)
Name    BitsPerSample 
Type    SHORT 
Count   N = SamplesPerPixel 
Default 1

有效 tiff 文件中的标签在十六进制中看起来像这样:

02 01 03 00 03 00 00 00 E2 01 00 00

  • 02 01
    - 标签 258
  • 03 00
    - 短型
  • 03 00 00 00
    - 值的数量 3
  • E2 01
    - 这就是我遇到的问题。这3条短裤怎么样?
  • 00 00
    - 到下一个 ifd 标签的偏移量 0

这三个短片如何编码为

E2 01
以及如何读取它们?我期望 3 个十进制值 8、8、8 或 16、16、16。我缺少什么? Short 是一个 8 位值。

我正在使用

struct
来读取和写入标签,这让我感到困惑,因为这对于单个值 482 作为无符号短整型来说毫无意义(
H
):

struct.pack('<HHIHH', 258, 3, 3, 482, 0)

h short integer 2 (2)
H unsigned short integer 2 (2)

我敢打赌我在这里遗漏了一些明显的东西。非常欢迎任何见解:-)

python image-processing tiff
1个回答
0
投票

对于只有一个分量(例如灰度或黑白)的数据,您可以直接在标签中对每个样本的最小、最大、位数进行编码,对于 RGB 数据,标签提供指向这些值的地址的指针。

所以在这种情况下它是数据在文件中的偏移量。事实上,在我的测试文件中,它指向 3 个短值 8。我在 tiff 文档中没有看到这一点,只在这里找到了这个在线参考:

https://paulbourke.net/dataformats/tiff/

© www.soinside.com 2019 - 2024. All rights reserved.