使用 ImageMagick 裁剪图像会产生相同大小的所有输出文件 (TIF)?

its*_*_me 2 imagemagick image-manipulation images

我正在使用我的佳能 LiDE 110 扫描一本罕见的旧书(食谱)以进行存档。扫描是.TIF文件,我想对它们进行批量裁剪以保持一致性,等等。

这就是我使用 ImageMagick 进行批量裁剪的方式:

mogrify -gravity North -crop 1600x2512+0+0 -type Palette -define tiff:rows-per-strip=16 -define tiff:subfiletype=PAGE *.tif
Run Code Online (Sandbox Code Playgroud)

(附加的命令行选项,例如type,rows-per-stripsubfiletype用于保持属性与原始图像相同。)

我也试过一次裁剪每个文件,如下所示:

mogrify -gravity North -crop 1600x2512+0+0 -type Palette -define tiff:rows-per-strip=16 -define tiff:subfiletype=PAGE IMG_0003.tif
Run Code Online (Sandbox Code Playgroud)

问题是生成的(输出)裁剪图像的字节大小都相同!(准确地说,都是 4,022,366 字节。)

原始图像[1]

$ identify *.tif

IMG_0002.tif TIFF 1660x2572 1660x2572+0+0 16-bit sRGB 256c 4.273MB 0.000u 0:00.000
IMG_0003.tif TIFF 1652x2556 1652x2556+0+0 16-bit sRGB 256c 4.226MB 0.000u 0:00.000
IMG_0004.tif TIFF 1656x2572 1656x2572+0+0 16-bit sRGB 256c 4.262MB 0.000u 0:00.000
IMG_0005.tif TIFF 1668x2604 1668x2604+0+0 16-bit sRGB 256c 4.347MB 0.000u 0:00.000
IMG_0006.tif TIFF 1680x2544 1680x2544+0+0 16-bit sRGB 256c 4.277MB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)

裁剪图像:

$ identify *.tif

IMG_0002.tif TIFF 1600x2512 1600x2512+30+0 16-bit sRGB 256c 4.022MB 0.000u 0:00.000
IMG_0003.tif TIFF 1600x2512 1600x2512+26+0 16-bit sRGB 256c 4.022MB 0.000u 0:00.000
IMG_0004.tif TIFF 1600x2512 1600x2512+28+0 16-bit sRGB 256c 4.022MB 0.000u 0:00.000
IMG_0005.tif TIFF 1600x2512 1600x2512+34+0 16-bit sRGB 256c 4.022MB 0.000u 0:00.000
IMG_0006.tif TIFF 1600x2512 1600x2512+40+0 16-bit sRGB 256c 4.022MB 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?


脚注:

  1. 为了确定问题中的问题(如果有的话),我暂时将原始文件公开,在这里:

    一旦问题有可接受的答案/解决方案,这些将被删除 已删除。

roa*_*ima 5

mogrify命令将图像裁剪为固定大小。它还消除了图像中存在的任何压缩,主要是为了避免重新压缩 JPEG 图像和降低图像质量。它还确保生成的 TIFF 与基线格式完全兼容。

结果是您每次扫描都会获得非常相似大小的文件:

x_pixels * y_pixels * bytes_per_pixel

在您的情况下,x_pixels=1600、y_pixels=2512 和 bytes_per_pixel=1,因为您已经指定了一个固定的调色板。考虑到元数据和调色板映射,生成的文件大小都将略大于 4,019,200 字节:

-rw-r--r--+ 1 roaima users 4225562 Dec 30 16:28 IMG_0003.tif    # Original
-rw-r--r--+ 1 roaima users 4022354 Jan  5 09:55 IMG_0003.tif    # Mogrified
Run Code Online (Sandbox Code Playgroud)

您可以看到元数据和调色板比理论最小大小多出 203,208 个字节。

现在,TIFF 格式有许多扩展,其中之一允许多种不同类型的压缩。这些压缩类型可以通过-compress {type}标志应用到mogrify。其中一些压缩类型是有损的,其他的则是无损的。以下是无损选项的一些比较大小:

-rw-r--r--+ 1 roaima users 4022354 Jan  5 10:02 IMG_0003.tif    # None
-rw-r--r--+ 1 roaima users 4022354 Jan  5 10:02 IMG_0003.tif    # BZip
-rw-r--r--+ 1 roaima users 446952 Jan  5 10:02 IMG_0003.tif     # LZW
-rw-r--r--+ 1 roaima users 594040 Jan  5 10:02 IMG_0003.tif     # RLE
-rw-r--r--+ 1 roaima users 429692 Jan  5 10:02 IMG_0003.tif     # Zip
-rw-r--r--+ 1 roaima users 478622 Jan  5 10:02 IMG_0003.tif     # LZMA
Run Code Online (Sandbox Code Playgroud)

出乎意料的是,BZip 压缩似乎失败了 - 至少在我的系统上 - 但是我无法通过我的首选搜索引擎找到任何其他报告的实例。

最终结果是,如果您mogrify稍微修改您的命令,您将获得尺寸大大减小的无损 TIFF 文件:

mogrify -gravity North -crop 1600x2512+0+0 -type Palette \
-define tiff:rows-per-strip=16 -define tiff:subfiletype=PAGE -compress Zip *.tif
Run Code Online (Sandbox Code Playgroud)