Images

使用 ImageMagick 裁剪圖像會導致所有輸出文件 (TIF) 大小相同?

  • January 6, 2016

我正在使用我的佳能 LiDE 110 掃描一本稀有的舊書(食譜)以進行存檔。掃描是.TIF文件,我想批量裁剪它們以保持一致性等。

這就是我使用 ImageMagick 進行批量裁剪的方式:

mogrify -gravity North -crop 1600x2512+0+0 -type Palette -define tiff:rows-per-strip=16 -define tiff:subfiletype=PAGE *.tif

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

問題是生成的(輸出)裁剪圖像的字節大小都相同!(確切地說,都是 4,022,366 字節。)

原始圖像

[Math Processing Error]$$ 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

裁剪圖像:

$ 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

為什麼會發生這種情況?


腳註:

  1. 為了確定問題中的問題(如果有),我暫時將原始文件公開,在這裡:

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

您可以看到元數據和調色板比理論最小大小多佔用了 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

出乎意料的是,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

引用自:https://unix.stackexchange.com/questions/252439