sips
是一个在 Mac OS X 和 BSD Unix 上处理图像的命令行工具。 sips
代表可编写脚本的图像处理系统。
我有一个 1 位黑白未压缩 TIFF 图像。以下sips
命令使用 LZW 压缩对其进行压缩。
sips -s format tiff -s formatOptions lzw sample.tif --out lzw.tif
然而,当在特定查看器上显示时,生成的 TIFF 图像会出现黑白反转。这种反演与“光度解释”相关,如下所述。
黑白图像中的每个像素都由一位表示。 1 位 TIFF 图像没有调色板,只能是黑白的。 “开”位和“关”位可以表示黑色或白色,具体取决于 TIFF 图像的光度标签 (ID262)。黑白 TIFF 图像的典型光度方向为 0 = 白色,1 = 黑色,对应光度标签值为 0。相反,0 = 黑色,1 = 白色对应光度标签值为 1。图像查看器完全忽略光度标签,始终假设 0 = 白色,尤其是 Windows XP 图像查看器。 (来源:atalasoft /KB/article.aspx?id=10069)
黑白颠倒是因为观看者更喜欢将白色设为 0,而sips
在生成 TIFF 图像时则将白色设为 1。
输入文件sample.tif 的白色为0。
输出文件lzw.tif 的白色为1。
要检查白色是0还是1(或者0是白色还是黑色),即“光度解释”是0还是1,至少可以采用以下两种方法。
使用exiftool
,可以从
http://owl.phy.queensu.ca/~phil/exiftool/
exiftool -S lzw.tif -PhotometricInterpretation
或者Preview.app
在 Mac OS X 上使用。
Tools > Show Inspector (Command-I) > TIFF
sips
我的问题:创建 1 位黑白 TIFF 图像时如何强制使用白色为 0?
正如我所说,我有一个 1 位黑白未压缩 TIFF 图像。事实上,我有几千个这样的。因此,我不需要在 GIMP 或 Photoshop 上手动处理它们,而是需要一个命令行工具来自动化该过程。
如果不能做我想做的事,那么我可能会发布一个新问题,询问一个 在 Mac OS X 上运行的sips
命令行工具; - 拍摄 1 位黑白未压缩 TIFF 图像; - 输出 1 位黑白 LZW 压缩 TIFF 图像,其中白色为 0。
(我的默认 shell 是 bash。)
同时,我会等着看是否sips
可以。
作为示例图像,我尝试上传 1 位黑白未压缩 TIFF 图像,该图像由白色背景上的黑色字母组成,其光度解释为 0 (WhiteIsZero)。然而,stackexchange 的图像上传机制会自动将 TIFF 转换为 PNG。
sips
本文顶部附近的命令采用未压缩的 TIFF 并输出 LZW 压缩的 TIFF 。以下sips
命令采用 PNG 并输出 LZW 压缩的 TIFF。
sips -s format tiff -s formatOptions lzw Cqdg2.png --out Cqdg2.tif
此生成的 TIFF 图像 Cqdg2.tif 与早期生成的 TIFF 图像 lzw.tif 在反演和光度解释方面存在相同的问题。
答案1
可能大多数人会建议您使用 ImageMagick,据我所知,它可用于 Mac OS X。在 Linux 上,我按如下方式使用它来生成与您问题中的图像类似的 tiff 图像,并操作它以提供压缩版本:光度选项。创建初始图像:
$ convert -size 200x200 -depth 1 -gravity center -negate \
label:UNIX a.tif
$ file a.tif
a.tif: TIFF image data, little-endian, ... bps=1, \
compression=none, PhotometricIntepretation=BlackIsZero, ...
根据需要压缩并更改颜色-negate
或光度:-define quantum:...
$ convert a.tif -define quantum:polarity=min-is-black -compress lzw b.tif
$ file b.tif
b.tif: ... compression=LZW, PhotometricIntepretation=BlackIsZero, ...
$ convert a.tif -define quantum:polarity=min-is-white -compress lzw b.tif
$ file b.tif
b.tif: ... compression=LZW, PhotometricIntepretation=WhiteIsZero, ...