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-strip
和subfiletype
用于保持属性与原始图像相同。)
我也试过一次裁剪每个文件,如下所示:
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)
为什么会发生这种情况?
脚注:
为了确定问题中的问题(如果有的话),我暂时将原始文件公开,在这里:
一旦问题有可接受的答案/解决方案,这些将被删除 已删除。
该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)