Qual é a diferença para os operadores sample / resample / scale / resize / adaptive-resize / thumbnail no ImageMagick convert?

84

Encontrei várias maneiras de alterar a resolução de uma imagem usando convert:

-sample
-resample
-scale
-resize
-adaptive-resize
-thumbnail

Qual é a diferença disso?

Se eu precisar fazer miniaturas de imagens grandes de vários tamanhos com proporção fixa (corte necessário) - qual é a minha melhor escolha?

Husa
fonte
Para obter ainda mais informações, consulte imagemagick.org/Usage/filter e imagemagick.org/Usage/filter/nicolas
fmw42

Respostas:

136

redimensionar

-resize 400x300+20+30(como os exemplos -scalee -sampleabaixo) converte uma imagem de entrada em uma imagem de saída que tem as dimensões de pixel de 400x300. Ele também muda a saída em 20 pixels para a direita e em 30 pixels para a parte inferior. Além disso, existem mais algumas diferenças para -scale:

  • -resizesuporta uma configuração adicional de -filter(que deve ocorrer na linha de comando antes de usar -resize!).

  • -filter determina o algoritmo exato a ser usado para as cores dos pixels adicionados no caso de ampliação, ou para as cores a serem usadas para os pixels restantes quando alguns de seus vizinhos são removidos em caso de minificação.

  • Para obter uma lista de filtros compatíveis, basta executar convert -list filter.

  • -filter point -resize 400x300cria exatamente o mesmo resultado -sample 400x300, mas ainda é um pouco mais lento.

  • Se não for definido ao lado (antes) -resize, a conversão será silenciosamente padronizada para -filter Lanczosque é mais lenta, mas que gera uma qualidade muito melhor (porque leva em conta as cores de todos os pixels circundantes para qualquer um recém-adicionado) do que -filter pointproduz (que usa o mais próximo regra do vizinho para determinar a cor de pixels recém-adicionados).

amostra

-sample 400x300converte uma imagem de entrada em uma imagem de saída que tem as dimensões de pixel de 400x300. No entanto, existem algumas diferenças muito importantes para -resize:

  • -samplenão suporta a configuração adicional de -filter; se definido de qualquer maneira, -filterserá simplesmente ignorado.

  • Ao ampliar (porque o tamanho da imagem de entrada pode ser menor que 400x300), os pixels são replicados em blocos.

  • Ao minimizar (porque o tamanho da imagem de entrada pode ser maior que 400x300), os pixels são sub-amostrados com um algoritmo muito simples: algumas linhas e colunas são simplesmente ignoradas.

  • O argumento geometry para -samplenão suporta nenhuma parte de deslocamento (ao contrário -resize, que respeita as diretivas de deslocamento para a saída).

  • A saída nunca terá mais cores (diferentes) do que a imagem de entrada tinha; ele pode ter menos cores.

  • Portanto, -sampleé muito rápido (mais rápido do que -resize) - mas a qualidade da saída é (geralmente) pior: você pode obter facilmente efeitos de bloqueio e aliasing extremos na saída resultante.

  • Uma característica importante do -sampleé que a nova imagem não conterá novas cores, embora algumas cores da imagem original possam desaparecer.

redimensionamento

-resampleusa como parâmetro a XxY resolução desejada , não a geometria de XxYpixel da imagem alvo. O objetivo deste operador é preservar o tamanho renderizado de uma imagem: suponha que sua imagem mede 4 polegadas por 3 polegadas em um dispositivo que a renderiza a 300 DPI. Em seguida, pedir ou irá redimensionar a imagem para que ela meça (novamente) 4 polegadas por 3 polegadas em um dispositivo de 72 DPI.-resample 72-resample 72x72

  • Esta operação funciona apenas para imagens que já tenham uma resolução desejada armazenada em seus metadados (nem todos os formatos de imagem suportam o conceito de resolução de imagem - JPEG, PNG e TIFF o fazem).

  • Se a imagem de origem estiver em um formato em que o suporte interno para uma resolução de imagem estiver faltando, a resolução original (assumida) da imagem deve ser especificada -densityna linha de comando antes de especificar a -resampleresolução.

escala

-scale 400x300produz o resultado equivalente (mas é mais rápido, porque evita todo o processamento do filtro) como o usa -filter box -resize 400x300. Ele também ignora completamente qualquer -filterconfiguração atual .

  • Ao minimizar, ele altera o tamanho da imagem simplesmente substituindo as cores de pixel, fazendo a média das respectivas cores de pixel de entrada juntas.

  • Ao ampliar, ele simplesmente replica os respectivos pixels de entrada para os pixels adicionais necessários.

adaptive-resize

-adaptive-resize 400x300não suporta (ou ignora, se definido) a parte de deslocamento de um parâmetro de geometria e também ignora a -gravityconfiguração, se presente.

  • Ele usa, por padrão, a triangulação dependente de dados ao redimensionar (a menos que o método de redimensionamento seja substituído pela especificação adicional -filter [something]).

miniatura

-thumbnailfunciona exatamente como -resize, com algumas diferenças:

  • Ele é otimizado para velocidade.

  • Ele também remove quaisquer perfis de cores incorporados para reduzir o tamanho do arquivo das miniaturas.


A seguinte resposta mostra alguns exemplos (ilustrados!) Da -resizediretiva. Cada ilustração mostra um resultado diferente, dependendo dos 'pequenos detalhes' do método de redimensionamento exato:

Kurt Pfeifle
fonte
4
Obrigado, isso faz muito mais sentido do que a documentação do ImageMagick.
Paul Brannan de
Se você tivesse imagens de amostra, seria ainda mais perfeito :-)
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
@KurtPfeifle: Em primeiro lugar, obrigado pela resposta altamente informativa. Por favor, você pode sugerir algum bom livro ou um pdf de documentação para Imagemagick. A melhor abordagem que tenho agora é raspar todas as páginas do Imagemagick para reduzir o tempo de leitura, mas é uma grande quantidade de informações (que, na minha opinião, nem sempre são descritivas o suficiente). Qualquer ajuda é altamente apreciada.
saurabheights
5

Como disse Ciro Santilli 新疆 改造 中心 六四 事件 法轮功:

Se você tivesse imagens de amostra, isso seria ainda mais perfeito :-)

-resize

google play com -resize (8,0 kB)

-amostra

-amostra (2,2kB)

-escala

-escala (7,0 kB)

-adaptive-resize

insira a descrição da imagem aqui (4,3 kB)

serv-inc
fonte