Cortar imagens usando o ImageMagick resulta em todos os arquivos de saída (TIF) do mesmo tamanho?

2

Estou digitalizando um livro antigo raro (livro de receitas) para arquivamento usando o meu Canon LiDE 110. As varreduras são .TIF arquivos, e eu quero agrupá-los em lote para uniformidade, etc.

É assim que estou fazendo o corte do lote usando o ImageMagick:

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

(As opções adicionais de linha de comando, como type , rows-per-strip e subfiletype , foram usadas para manter as propriedades idênticas às imagens originais.)

Eu também tentei cortar cada arquivo de uma só vez como:

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

O problema é que as imagens cortadas resultantes (de saída) são todas do mesmo tamanho em bytes! (Todos são 4.022.366 bytes para ser exato.)

Imagens originais [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

Imagens recortadas:

$ 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

Por que isso pode estar acontecendo?

Notas de rodapé:

  1. Para identificar o problema na pergunta (se houver) estou disponibilizando publicamente os arquivos originais, aqui:

    Estes serão excluídos quando a pergunta tiver uma resposta / resolução aceitável Excluída.

por its_me 31.12.2015 / 02:27

1 resposta

5

O comando mogrify corta a imagem para um tamanho fixo. Também remove qualquer compressão presente na imagem, principalmente para evitar a recompressão de imagens JPEG e perder a qualidade da imagem. Isso também garante que o TIFF resultante seja totalmente compatível com o formato de linha de base .

O resultado é que você obterá arquivos de tamanho muito semelhante para cada uma das suas verificações:

x_pixels * y_pixels * bytes_per_pixel

No seu caso x_pixels = 1600, y_pixels = 2512 e bytes_per_pixel = 1 porque você especificou uma paleta de cores fixa. Permitindo metadados e o mapa de paleta, os tamanhos de arquivo resultantes serão um pouco maiores que 4.019.200 bytes:

-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

Você pode ver que os metadados e a paleta levam 203.208 bytes adicionais acima do tamanho mínimo teórico.

Agora, há um número de extensões no formato TIFF, um dos quais permite uma número de diferentes tipos de compressão. Esses tipos de compactação podem ser aplicados com o -compress {type} flag para mogrify . Alguns desses tipos de compactação são com perdas, outros são sem perdas. Aqui estão alguns tamanhos comparativos para as opções sem perdas:

-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

Inesperadamente, a compactação BZip parece falhar - pelo menos no meu sistema -, mas não consegui encontrar nenhuma outra instância disso relatada por meio de meu mecanismo de pesquisa preferido.

O resultado líquido é que, se você modificar um pouco o comando mogrify , obterá arquivos TIFF sem perdas em um tamanho bastante reduzido:

mogrify -gravity North -crop 1600x2512+0+0 -type Palette \
-define tiff:rows-per-strip=16 -define tiff:subfiletype=PAGE -compress Zip *.tif
    
por 05.01.2016 / 11:07