Formato MIFF
Cabeçalho MIFF • Dados Binários MIFF
O Magick Image File Format (MIFF) é o formato próprio e independente de plataforma do ImageMagick para armazenar imagens de mapa de bits. Ele tem uma vantagem sobre outros formatos de imagem por armazenar todos os metadados conhecidos pelo ImageMagick (por exemplo, perfis de cor da imagem, comentários, autor, direitos autorais etc.), enquanto outros formatos podem suportar apenas uma pequena parte dos metadados disponíveis ou nenhum. Um arquivo de imagem MIFF é composto de duas seções. A primeira seção é um cabeçalho composto por chaves que descrevem a imagem em forma de texto. A seção seguinte são os dados binários da imagem. Discutimos essas seções em detalhe abaixo.
Cabeçalho MIFF
O cabeçalho MIFF é composto inteiramente por caracteres ISO-8859-1. Os campos do cabeçalho são combinações de chave e valor no formato key = value, com cada chave e valor separados por um sinal de igual (=). Cada combinação key = value é delimitada por pelo menos um caractere de controle ou de espaço em branco. Comentários podem aparecer na seção do cabeçalho e são sempre delimitados por chaves. O cabeçalho MIFF sempre termina com um caractere de dois-pontos (:), seguido por um caractere ctrl-Z. Também é comum preceder os dois-pontos com um caractere de avanço de formulário (formfeed) e uma quebra de linha. O avanço de formulário impede a listagem dos dados binários ao usar o programa more do Linux, enquanto o ctrl-Z tem o mesmo efeito com o comando type na linha de comando do Windows.
A seguir está uma lista parcial das combinações key = value que tipicamente são encontradas em um arquivo MIFF:
| Chave | Descrição |
|---|---|
| background-color = color | |
| border-color = color | |
| matte-color = color | estas chaves opcionais refletem, respectivamente, as cores de fundo, borda e mate da imagem. Uma cor pode ser um nome (por exemplo, white) ou um valor hexadecimal (por exemplo, #ccc). |
| class = | o tipo de dados binários de pixel armazenados no arquivo MIFF. Se esta chave não estiver presente, presume-se dados de pixel DirectClass. |
| colors = value | o número de cores em uma imagem DirectClass. Para uma imagem PseudoClass, esta chave especifica o número de entradas no mapa de cores. Se esta chave não estiver presente no cabeçalho e a imagem for PseudoClass, presume-se um mapa de cores em tons de cinza linear de 256 cores. O número máximo de entradas do mapa de cores é 65536. |
| colorspace = | o espaço de cor dos dados de pixel. O padrão é RGB. |
| columns = value | a largura da imagem em pixels. Esta é uma chave obrigatória e não tem valor padrão. |
| compression = | o tipo de algoritmo usado para comprimir os dados da imagem. Se esta chave não estiver presente, presume-se que os dados de pixel não estão comprimidos. |
| delay = microseconds | o atraso entre quadros em uma sequência de imagens, em microssegundos. |
| depth = | a profundidade de um único valor de cor representando valores de 0 a 255 (profundidade 8), 0 a 65535 (profundidade 16) ou 0 a 4294967295 (profundidade 32). Se esta chave estiver ausente, presume-se uma profundidade de 8. |
| dispose = value | método de descarte de camada. Estes são os valores válidos: 0 = Nenhum descarte especificado. 1 = Não descartar entre quadros. 2 = Sobrescrever o quadro com a cor de fundo do cabeçalho. 3 = Sobrescrever com o quadro anterior. |
| gamma = value | o gama da imagem. Se não for especificado, presume-se um gama de 1.0 (resposta de brilho linear). |
| id=ImageMagick | identifica o arquivo como um arquivo de imagem no formato MIFF. Esta chave é obrigatória, deve ser o primeiro par chave-valor, só pode aparecer uma vez e não tem padrão. Embora esta chave possa aparecer em qualquer lugar do cabeçalho, ela deve começar como a primeira chave do cabeçalho na coluna 1. Isso permitirá que programas como file(1) identifiquem facilmente o arquivo como MIFF. |
| iterations = value | o número de vezes que uma sequência de imagens faz o laço antes de parar. |
| label = { string ] | define um título ou legenda curto para a imagem. Se aparecer qualquer espaço em branco no rótulo, ele deve ser delimitado por chaves. |
| matte = | especifica se a imagem possui dados de mate. Os dados de mate são geralmente úteis para composição de imagens. |
| montage = |
tamanho e localização dos blocos individuais de uma imagem composta. Use esta chave quando a imagem for uma composição de vários blocos diferentes. Um bloco consiste em uma imagem e, opcionalmente, uma borda e um rótulo. Width é o tamanho em pixels de cada bloco individual na direção horizontal e height é o tamanho na direção vertical. Cada bloco deve ter um número igual de pixels em largura e igual em altura. No entanto, a largura pode diferir da altura. X offset é o deslocamento em número de pixels a partir da borda vertical da imagem composta onde o primeiro bloco de uma linha começa, e y offset é o deslocamento a partir da borda horizontal onde o primeiro bloco de uma coluna começa. Se esta chave for especificada, um diretório de nomes de blocos deve seguir o cabeçalho da imagem. O formato do diretório é explicado abaixo. |
| page = value | tamanho e localização preferidos de uma tela de imagem. |
| profile-icc = value | o número de bytes no perfil de cor do International Color Consortium. O perfil é definido pela especificação de perfil ICC localizada em http://www.color.org/icc_specs2.html. |
| red-primary = x,y | |
| green-primary = x,y | |
| blue-primary = x,y | |
| white-point = x,y | esta chave opcional reflete as primárias de cromaticidade e o ponto branco. |
| rendering-intent = | A intenção de renderização é a propriedade CSS-1 que foi definida pelo International Color Consortium (http://www.color.org). |
| resolution = |
resolução vertical e horizontal da imagem. Veja units para as unidades de resolução específicas (por exemplo, pixels por polegada). |
| rows = value | a altura da imagem em pixels. Esta é uma chave obrigatória e não tem valor padrão. |
| scene = value | o número de sequência deste arquivo de imagem MIFF. Esta chave opcional é útil quando um arquivo de imagem MIFF é um de uma sequência de arquivos usados em uma animação. |
| signature = value | esta chave opcional contém uma string que identifica de forma única o conteúdo de pixels da imagem. Recomenda-se o algoritmo de resumo de mensagem SHA-256 do NIST. |
| units = | unidades de resolução da imagem. |
Outros pares de chave-valor são permitidos. Se um valor contiver espaço em branco, ele deve ser delimitado por chaves, como ilustrado aqui:
id=ImageMagick
class=PseudoClass colors=256 matte=False
columns=1280 rows=1024 depth=8
compression=RLE
colorspace=RGB
copyright={© 1999-2017 ImageMagick Studio LLC}
⋮
Observe que as combinações key = value podem ser separadas por quebras de linha ou espaços e podem ocorrer em qualquer ordem dentro do cabeçalho. Comentários (entre chaves) podem aparecer em qualquer lugar antes dos dois-pontos.
Se você especificar a chave montage no cabeçalho, siga o cabeçalho com um diretório de blocos de imagem. Esse diretório consiste em um nome para cada bloco da imagem composta, separados por um caractere de quebra de linha. A lista é terminada com um caractere NULL.
Se você especificar a chave color-profile no cabeçalho, siga o cabeçalho (ou o diretório de montage, se a chave montage estiver no cabeçalho) com o perfil de cor binário.
O cabeçalho é separado dos dados da imagem por um caractere : imediatamente seguido por uma quebra de linha.
Dados Binários MIFF
Em seguida vêm os próprios dados binários da imagem. Como os dados da imagem são formatados depende da classe da imagem, conforme especificado (ou não) pelo valor da chave class no cabeçalho.
As imagens DirectClass são de tom contínuo, armazenadas como valores de intensidade RGB (vermelho, verde, azul), RGBA (vermelho, verde, azul, alfa), CMYK (ciano, amarelo, magenta, preto) ou CMYKA (ciano, amarelo, magenta, preto, alfa), conforme definido pela chave colorspace. Cada valor de intensidade tem um byte de comprimento para imagens de profundidade 8 (0..255), dois bytes para uma profundidade de 16 (0..65535), e imagens de profundidade 32 (0..4294967295) requerem quatro bytes na ordem do byte mais significativo primeiro.
As imagens PseudoClass são imagens RGB mapeadas por cores. O mapa de cores é armazenado como uma série de valores de pixel vermelho, verde e azul, cada valor tendo o tamanho de um byte. Se a profundidade da imagem for 16, cada entrada do mapa de cores consome dois bytes, com o byte mais significativo primeiro. O número de entradas do mapa de cores é definido pela chave colors. Os dados do mapa de cores ocorrem imediatamente após o cabeçalho (ou o diretório de imagem, se a chave montage estiver no cabeçalho). Os dados de imagem PseudoClass são um array de valores de índice no mapa de cores. Se houver 256 cores ou menos na imagem, cada byte dos dados da imagem contém um valor de índice. Se a imagem contiver mais de 256 cores ou a profundidade da imagem for 16, o valor de índice é armazenado como dois bytes contíguos, com o byte mais significativo primeiro. Se matte for true, cada índice do mapa de cores é seguido por um valor alfa de 1 ou 2 bytes.
Os dados de pixel da imagem em um arquivo MIFF podem ser não comprimidos, codificados por comprimento de execução (runlength), comprimidos com Zip ou comprimidos com BZip. A chave compression no cabeçalho define como os dados da imagem são comprimidos. Pixels não comprimidos são armazenados uma linha de varredura por vez, em ordem de linha. A compressão por codificação de comprimento de execução conta sequências de pixels adjacentes idênticos e armazena os pixels seguidos por um byte de comprimento (o número de pixels idênticos menos 1). As compressões Zip e BZip comprimem cada linha de uma imagem e precedem a linha comprimida com o comprimento em bytes dos pixels comprimidos, como uma palavra na ordem do byte mais significativo primeiro.
Os arquivos MIFF podem conter mais de uma imagem. Basta concatenar cada imagem individual (composta de um cabeçalho e dados de imagem) em um único arquivo.