Exemplos do ImageMagick -- Redimensionar ou Escalar (Técnicas Gerais)
Vamos analisar a ampliação e a redução de imagens de várias maneiras. A imagem permanece intacta e inteira, mas os pontos individuais de cor são mesclados ou expandidos para ocupar uma área de tela menor/maior. Note que, embora isso esteja relacionado à resolução de uma imagem (número de pixels por comprimento no mundo real), isso é mais um produto de como a imagem é eventualmente usada, e não uma verdadeira preocupação do Processamento Direto de Imagens.
Redimensionar Imagens A maneira mais óbvia e comum de mudar o tamanho de uma imagem é redimensionar ou escalar uma imagem. O conteúdo da imagem é então ampliado ou, mais comumente, reduzido para caber no tamanho desejado. Mas, embora os pixels e cores reais da imagem sejam modificados, o conteúdo representado pela imagem permanece essencialmente inalterado. No entanto, redimensionar imagens pode ser uma questão complicada. Pode modificar imagens de maneiras muito prejudiciais, e não existe uma 'melhor maneira', pois o que é melhor é subjetivo quanto ao que você realmente quer obter do processo de redimensionar. Como não existe uma maneira 'melhor' ou 'perfeita', há muitas opções que você pode querer considerar. O IM sempre tentou oferecer opções para lhe dar o máximo de controle no redimensionar de imagens. Existem centenas de possibilidades, estilos e técnicas, e até mesmo os especialistas em redimensionar estão constantemente tentando encontrar novas e diferentes maneiras de mudar o tamanho de uma imagem. Claro que, para a maioria das pessoas, as opções padrão normais são boas o suficiente, pois foram projetadas com o uso geral em mente. O operador resize foi muito cuidadosamente projetado para tentar produzir um resultado muito bom para imagens do mundo real. Ou seja, não que você não possa usá-lo para diagramas ou desenhos de linha, embora para esse tipo de imagem você possa precisar usar algumas das opções mais avançadas que veremos mais adiante.
A principal coisa que você deve considerar ao especificar uma imagem para redimensionar é...
Você realmente quer modificar a imagem? Redimensionar causará mudanças drásticas em uma imagem, e evitar ou minimizar 'artefatos' indesejados é da maior importância. Talvez apenas um leve Shave das bordas, ou um Crop mais geral da imagem produza um resultado melhor e mais desejável do que um redimensionar total da imagem. Geralmente ficará melhor e a área restante será uma cópia perfeita do original. Como muitas vezes é melhor não redimensionar imagens...
Resize não fará absolutamente nada se a imagem redimensionada tiver o mesmo tamanho.
A exceção a isso (sempre há uma exceção) é se você realmente especificar um Filtro de Reamostragem usando uma configuração "[-filter](https://imagemagick.org/command-line-options/#filter)". Nesse caso, o comportamento normal de "não fazer nada se a imagem não for redimensionada" é sobrescrito e o filtro será aplicado. No entanto, muitos filtros (mesmo os filtros padrão) podem desfocar imagens levemente. Faz parte de sua natureza. Então, normalmente, esse 'curto-circuito' para um resize sem operação é uma coisa boa. O argumento para o operador resize é a área na qual a imagem deve ser ajustada. Essa área não é o tamanho final da imagem, mas o tamanho máximo da área na qual a imagem deve ser ajustada. Ou seja, porque o IM tenta preservar a proporção da imagem mais do que o tamanho final (a menos que uma flag '!' seja dada), mas pelo menos uma (se não ambas) das dimensões finais deve corresponder ao argumento da imagem dado. Então deixe-me ser claro...
Resize ajustará a imagem dentro do tamanho solicitado.
Ele NÃO preenche o tamanho de caixa solicitado.
A proporção é preservada basicamente para que quaisquer círculos na imagem de entrada permaneçam um círculo na imagem de saída. Ou seja, a imagem não será esmagada ou espremida, apenas redimensionada, a menos que você diga o contrário. Por exemplo, aqui eu tento ajustar duas imagens de origem, uma imagem maior e uma imagem menor, em uma caixa quadrada de 64x64 pixels de tamanho.
magick dragon_sm.gif -resize 64x64 resize_dragon.gif
magick terminal_sm.gif -resize 64x64 resize_terminal.gif
Como você pode ver, uma imagem quadrada de 64x64 NÃO foi produzida por "[-resize](https://imagemagick.org/command-line-options/#resize)". Na verdade, as imagens foram apenas ampliadas ou reduzidas o suficiente para melhor caber no tamanho dado. Ignorar a Proporção (flag '!')
Se quiser, você pode forçar "[-resize](https://imagemagick.org/command-line-options/#resize)" a ignorar a proporção e distorcer a imagem de modo que sempre gere uma imagem exatamente do tamanho especificado. Isso é feito adicionando o caractere '!' ao tamanho. Infelizmente, esse caractere também é às vezes usado para fins especiais por vários shells de linha de comando UNIX. Então você pode ter que escapar o caractere de alguma forma para preservá-lo.
magick dragon_sm.gif -resize 64x64\! exact_dragon.gif
magick terminal.gif -resize 64x64\! exact_terminal.gif
Apenas Reduzir Imagens Maiores (flag '>')
Outra opção comumente usada é restringir o IM para que ele apenas reduza imagens de modo a caberem no tamanho dado. Nunca ampliar. Esta é a opção de resize '>'. Pense nela como aplicando o resize apenas a imagens 'maiores que' (greater than) o tamanho dado (é um pouco contraintuitivo).
magick dragon_sm.gif -resize 64x64\> shrink_dragon.gif
magick terminal.gif -resize 64x64\> shrink_terminal.gif
| Esta opção é frequentemente muito importante para economizar espaço em disco para imagens, ou na geração de miniaturas, quando ampliar imagens geralmente não é desejável, pois tende a produzir ampliações 'borradas'. | A flag Apenas Reduzir (flag '>') é um caractere especial tanto no Shell UNIX quanto em scripts batch do Windows, e você precisará escapar esse caractere (usando barra invertida '\>' no shell, e '^>' no batch do Windows). Ele também é especial em páginas web HTML, então scripts PHP também podem precisar de algum tratamento especial. |
|---|---|
Apenas Ampliar Imagens Menores (flag '<') |
|
O inverso da flag anterior é '<', que apenas amplia imagens menores que o tamanho dado, e é raramente usado. O uso mais notável é com um argumento como '1x1<'. Esse argumento de resize nunca redimensionará realmente nenhuma imagem. Em outras palavras, é uma não-operação, que permitirá criar um curto-circuito em uma operação de resize em programas e scripts que sempre usam "[-resize](https://imagemagick.org/command-line-options/#resize)". Fora isso, você provavelmente não quer realmente usar este recurso. Um exemplo de uso desse argumento de 'curto-circuito' é para a configuração "[-geometry](https://imagemagick.org/command-line-options/#geometry)" de "magick montage". Veja Montage and Geometry, caution needed para mais detalhes. |
A flag Apenas Ampliar (flag '<') é um caractere especial tanto no Shell UNIX quanto em scripts batch do Windows, e você precisará escapar esse caractere (usando barra invertida '\<' no shell, e '^<' no batch do Windows). Ele também é especial em páginas web HTML, então scripts PHP também podem precisar de algum tratamento especial. |
| --- | --- |
Flag de Preencher Área (flag '^') |
|
A partir do IM v6.3.8-3, o IM agora tem uma nova flag de opção de geometria '^' que é usada para redimensionar a imagem com base na menor dimensão que se ajusta. Ou seja, a imagem é redimensionada para preencher completamente (e até transbordar) a área de pixels dada. |
magick dragon_sm.gif -resize 64x64^ fill_dragon.gif
magick terminal.gif -resize 64x64^ fill_terminal.gif
Como está, esta opção não parece muito útil, mas quando combinada com um "[-crop](https://imagemagick.org/command-line-options/#crop)" centralizado (ou não centralizado) ou "[-extent](https://imagemagick.org/command-line-options/#extent)" para remover as partes excedentes da imagem, você pode ajustar a imagem de modo a preencher completamente a área especificada. Tanto o resize quanto os argumentos de tamanho final da imagem devem ter os mesmos valores. Embora o "[-crop](https://imagemagick.org/command-line-options/#crop)" seja o mais lógico, pode exigir um "[+repage](https://imagemagick.org/command-line-options/#repage)" extra para remover as informações de camadas da tela virtual. O "[-extent](https://imagemagick.org/command-line-options/#extent)" não exige essa limpeza, mas ainda permite o uso de "[-gravity](https://imagemagick.org/command-line-options/#gravity)" para posicionamento. Veja Cutting and Bordering para mais informações.
magick dragon_sm.gif -resize 64x64^ \
-gravity center -extent 64x64 fill_crop_dragon.gif
magick terminal.gif -resize 64x64^ \
-gravity center -extent 64x64 fill_crop_terminal.gif
Além disso, "[-extent](https://imagemagick.org/command-line-options/#extent)" pode ser usado para preencher imagens que usam o resize normal (com uma configuração de cor "[-background](https://imagemagick.org/command-line-options/#background)"). Veja Thumbnails, Fit to a Given Space Summary, para mais sobre esse tipo de operação. |
Lembre-se de que isso requer o IM v6.3.8-3 ou superior para fazer uso dele. Caso contrário, use a técnica mais antigaRedimensionar para Preencher um Espaço Dado abaixo. |
|---|---|
A Flag de Preencher Área (flag '^') é um caractere especial em scripts batch do Windows e você precisará escapar esse caractere duplicando-o. Por exemplo '^^', ou não funcionará. Veja Windows Batch Scripting para esta e outras particularidades do windowing. |
|
| --- | --- |
Redimensionar por Porcentagem (flag '%') |
|
Adicionar um sinal de porcentagem, '%', ao argumento de "[-resize](https://imagemagick.org/command-line-options/#resize)" faz com que o resize escale a imagem pela quantidade especificada. |
magick dragon_sm.gif -resize 50% half_dragon.gif
magick terminal.gif -resize 50% half_terminal.gif
| Esteja avisado, no entanto, de que o tamanho final em pixels da imagem será arredondado para o inteiro mais próximo. Ou seja, você não gerará pixels parciais ao longo da borda da imagem! Como resultado, a escala real pode não corresponder exatamente ao fator de escala que você fornece, e pode até ser ligeiramente diferente para as direções X e Y, mas será muito próxima. (Veja Resize usando Distort abaixo). | Se você realmente quer redimensionar a imagem de modo que o tamanho final pareça ter diferenças de tamanho de pixel parcial, você pode usar oOperador de Distorção Geral e especificamente o Scale-Rotation-Translate (veja Distort Resizing abaixo). |
|---|---|
A Flag de Redimensionar por Porcentagem (flag '%') é um caractere especial em scripts batch do Windows e você precisará escapar esse caractere duplicando-o. Por exemplo '%%', ou não funcionará. Veja Windows Batch Scripting para esta e outras particularidades do windowing. |
|
| --- | --- |
_Todas essas opções de 'flag' '!', '<', '>', '^', '%', e '@' são apenas chaves de liga/desliga para o operador "[-resize](https://imagemagick.org/command-line-options/#resize)". Apenas a presença (ou ausência) do caractere no argumento de resize é o que importa, não sua posição. Elas podem aparecer no início ou no fim do argumento, ou antes ou depois de números individuais (embora não no meio de um número). |
Ou seja, '%50' tem exatamente o mesmo efeito que '50%', embora o último seja preferido para legibilidade. Além disso, '50%x30' na verdade significa '50%x30%' e NÃO 50% de largura e 30 pixels de altura como você poderia pensar.
Este é o caso para todos os argumentos do IM que usam um estilo de 'geometria' ('WxH' ou '+X+Y') de argumento. No entanto, deslocamentos como '+X+Y' nunca são tratados como uma porcentagem._
---|---
Redimensionar usando um Limite de Contagem de Área em Pixels (flag '@')
Há uma última flag de opção de "[-resize](https://imagemagick.org/command-line-options/#resize)". O símbolo "arroba" '@' redimensionará uma imagem para conter não mais do que o número dado de pixels. Isso pode ser usado, por exemplo, para tornar uma coleção de imagens de tamanhos diferentes aproximadamente do mesmo tamanho. Por exemplo, aqui redimensionamos ambas as nossas imagens para um tamanho aproximado de 64x64, ou 4096 pixels de tamanho.
magick dragon_sm.gif -resize 4096@ pixel_dragon.gif
magick terminal.gif -resize 4096@ pixel_terminal.gif
Note que o tamanho final da imagem não está limitado a 64 pixels de altura ou largura, mas terá uma área que é o mais próxima possível de (mas menor que) esse tamanho que o IM conseguir. Isso significa que uma dimensão geralmente será ligeiramente maior que 64 pixels e uma será ligeiramente menor. De certa forma, esse é um compromisso ideal para criar miniaturas de imagens. Veja Area Fit Thumbnail Size. Você também pode adicionar a flag '>' para reduzir apenas imagens que têm mais do que o número calculado de pixels, enquanto deixa intactas imagens que já são menores que esse tamanho. | _Infelizmente, a flag ' <', ampliar imagens menores, é atualmente ignorada ao usar 'Area Resize'.
_
---|---
Redimensionar Durante a Leitura da Imagem
O operador resize também pode ser aplicado a imagens imediatamente após serem lidas, antes de serem adicionadas à sequência de imagens atual e da próxima imagem ser lida. Dessa forma, uma quantidade mínima de memória é necessária para ler muitas imagens. Veja Image Read Modifiers para mais detalhes. Por exemplo...
magick dragon_sm.gif'[64x64]' read_dragon.gif
magick terminal.gif'[64x64]' read_terminal.gif
| O único problema com esta técnica é que nenhuma opção especial de resize pode ser usada durante o processo de leitura da imagem. | Redimensionar e transparência representaram um problema para o ImageMagick antes da v6.2.4, produzindo um efeito de halo preto ao redor de objetos de cor clara sobre transparência. Isso foi pesquisado e finalmente corrigido a partir dessa versão em diante. Para mais detalhes desse bug antigo, vejaResize Halo Bug |
|---|---|
Outros Operadores de Resize Geometry - Redimensionar apenas a última imagemGeometry é uma opção muito especial. O operador se comporta de maneira ligeiramente diferente em cada comando do IM, e frequentemente de maneiras especiais e mágicas. As razões para isso são principalmente devido ao uso legado e devem ser evitadas se possível. Primeiro, em "magick display" ele é usado para dimensionar e posicionar a janela da imagem sendo exibida. Esse era seu uso e significado original quando o IM foi iniciado. Foi a partir disso que surgiram suas outras capacidades de 'resize'. Para "montage", "[-geometry](https://imagemagick.org/command-line-options/#geometry)" é uma configuração que é salva até que todos os argumentos tenham sido lidos. Nesse ponto, ela então define o tamanho final do tile (célula) (ou deixa que "magick montage" o calcule), enquanto os argumentos de posição são usados para especificar o espaço ao redor das células de tile. Veja Montage Control Settings. Em "[composite](basics.html#composite)", "[-geometry](https://imagemagick.org/command-line-options/#geometry)" também é salvo até que o fim dos argumentos seja alcançado. Então é usado para redimensionar e posicionar a imagem de sobreposição (a primeira imagem dada) antes de ela ser sobreposta na imagem de fundo (a segunda imagem). Por exemplo, veja Composite Multiple Images. Como você pode ver, ele é usado como uma 'configuração' na maioria dos comandos do IM, mas em "magick" "[-geometry](https://imagemagick.org/command-line-options/#geometry)" é tanto um operador especial de redimensionar imagem quanto uma configuração de posicionamento. O que ele faz é "[-resize](https://imagemagick.org/command-line-options/#resize)" apenas a última imagem na sequência de imagens atual. Este é o único operador de processamento de imagem projetado especificamente para afetar apenas uma imagem (a última), na sequência de imagens atual. Para complicar ainda mais essa opção especial, as partes posicionais da opção "[-geometry](https://imagemagick.org/command-line-options/#geometry)" são salvas pelo comando "magick", assim como acontece em "[composite](basics.html#composite)". Ou seja, qualquer posição é preservada para uso posterior pelo "[-composite](https://imagemagick.org/command-line-options/#composite)", para posicionar a imagem de 'sobreposição' (a penúltima imagem na sequência de imagens atual) sobre a imagem de 'fundo' (a primeira imagem na sequência de imagens). Por essa razão, você deve limitar o uso de "[-geometry](https://imagemagick.org/command-line-options/#geometry)" em comandos "magick" para imediatamente antes de uma operação "[-composite](https://imagemagick.org/command-line-options/#composite)" ou "[-layers](https://imagemagick.org/command-line-options/#layers) composite". Para resumir, este operador só é realmente útil após ler ou criar uma segunda imagem, imediatamente antes de você realizar algum tipo de Alpha Composition para processar com essas imagens. Para exemplos práticos de uso de "[-geometry](https://imagemagick.org/command-line-options/#geometry)" para redimensionar/posicionar imagens, veja Compositing Multiple Images. Thumbnail - Redimensionar com remoção de perfilO operador "-thumbnail" é uma variação de "[-resize](https://imagemagick.org/command-line-options/#resize)" projetada especificamente para reduzir imagens muito muito grandes a pequenas miniaturas. Primeiro ele usa "[-strip](https://imagemagick.org/command-line-options/#strip)" para remover todo perfil e outras coisas supérfluas da imagem. Depois ele usa "[-sample](https://imagemagick.org/command-line-options/#sample)" para reduzir a imagem a 5 vezes a altura final. Por fim, ele faz um "[-resize](https://imagemagick.org/command-line-options/#resize)" normal para reduzir a imagem ao seu tamanho final. Tudo isso é basicamente para acelerar a geração de miniaturas a partir de arquivos muito grandes. No entanto, para miniaturas de imagens JPEG, você pode limitar o tamanho da imagem lida do disco usando a configuração de opção especial "-define jpeg:size=". Veja Reading JPEG Images para mais detalhes. Assim, essa melhoria de velocidade raramente é necessária para JPEG na geração de miniaturas, embora a remoção de perfil ainda seja muito importante. Para outros formatos de imagem, como TIFF, tanto a remoção de perfil quanto a melhoria de velocidade ainda são vitalmente importantes. Por isso, ainda é a maneira recomendada de redimensionar imagens para a criação de miniaturas. |
Antes do IM v6.5.4-7, o "[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)" removia TODOS os perfis da imagem, incluindo os perfis de cor ICC. A partir dessa versão em diante, os perfis de cor serão preservados. Se o perfil de cor não for desejado, então use "[-strip](https://imagemagick.org/command-line-options/#strip)" para remover todos os perfis. |
|---|---|
Resample - Mudar a resolução de uma imagemAssim como nos operadores alternativos de resize anteriores, "-resample" também é um simples invólucro em torno do operador "[-resize](https://imagemagick.org/command-line-options/#resize)" normal. Seu propósito, no entanto, é ajustar o número de pixels em uma imagem de modo que, quando exibida na Resolução ou Densidade dada, a imagem ainda pareça do mesmo tamanho em termos do mundo real. Ou seja, a imagem dada é ampliada ou reduzida, em termos do número de pixels, enquanto o tamanho da imagem em unidades do mundo real permanece o mesmo. Destina-se a ser usado para imagens que foram lidas de, ou serão escritas para, um programa ou dispositivo de uma resolução ou densidade específica. Isso é especialmente importante para ajustar uma imagem para caber em um dispositivo de saída de hardware específico, seja um monitor, ou impressora, ou um formato de imagem postscript ou PDF de uma resolução específica. Apenas lembre-se de que o tamanho da imagem no mundo real não muda, apenas sua resolução e, claro, o número de pixels usados para representar a imagem. Por exemplo, suponha que você tivesse uma imagem que você escaneou a 300dpi (pontos por polegada). A imagem foi salva com essa resolução (densidade) ou, quando você a leu no IM, você a especificou como uma imagem de 300dpi (usando "[-density](https://imagemagick.org/command-line-options/#density)"). Agora você decide exibi-la em uma tela que tem uma resolução de 90dpi, então você faz um "-resample 90". O IM agora redimensionará a imagem em 90/300 ou para 30% do tamanho original da imagem e definirá a nova densidade da imagem para 90dpi. A imagem agora é menor em termos do número de pixels usados, mas se exibida em um monitor de 90dpi aparecerá no mesmo tamanho físico que a imagem original que você escaneou. Ou seja, ela agora tem uma resolução apropriada para um monitor de 90dpi, então será exibida ao usuário em seu tamanho original do mundo real. Uma configuração "[-units](https://imagemagick.org/command-line-options/#units)" (com os argumentos 'PixelsPerInch' ou 'PixelsPerCentimeter') pode ser necessária em algumas situações para fazer este operador funcionar corretamente. Esta configuração também pode ser importante para a saída para os formatos de arquivo de imagem Postscript e PDF. Note que apenas um pequeno número de formatos de arquivo de imagem (como JPEG, PNG e TIFF) são capazes de armazenar a resolução ou densidade da imagem com os dados da imagem. Para formatos que não suportam uma resolução de imagem, ou que são formatos de imagem multi-resolução (baseados em vetor), a resolução original da imagem deve ser especificada através do atributo "[-density](https://imagemagick.org/command-line-options/#density)" (veja Density Image Meta-data) antes de ser lida. Se nenhum atributo de densidade tiver sido definido, o IM assumirá que ela tem uma densidade padrão de 72dpi. Definir a densidade DEPOIS de ler tal imagem afetará apenas sua resolução de saída, e não afetará seu tamanho final em termos de pixels. Scale - Reduzir com média de pixelsO operador de resize "-scale" é uma forma simplificada e mais rápida do comando resize. Ao ampliar uma imagem, os pixels na imagem são replicados para formar grandes blocos retangulares de cor. O que é ótimo para mostrar uma ampliação limpa e não borrada de uma imagem. Por exemplo, aqui está uma visão ampliada de um dos padrões de tile embutidos... |
magick -size 8x8 pattern:CrossHatch30 -scale 800% scale_crosshatch.gif
![[IM Output]](../static/img/resize/scale_crosshatch.gif)
Geralmente, um único valor de porcentagem que é um múltiplo de 100% é usado para a ampliação da imagem, de modo a garantir que todos os pixels sejam ampliados na mesma quantidade, caso contrário você pode ter linhas e colunas de pixels de tamanhos diferentes produzindo um padrão de Moiré em grande escala. Por exemplo, aqui eu escalei mal um padrão suave de 'checks cinza 50%', usando um tamanho que não era um múltiplo do tamanho da imagem original. |
magick pattern:gray50 scale_gray_norm.gif
magick pattern:gray50 -scale 36 scale_gray_mag.gif
![[IM Output]](../static/img/resize/scale_gray_mag.gif)
Ao reduzir imagens, pixels vizinhos têm sua média calculada juntos para produzir um novo pixel colorido. Por exemplo, escalar uma imagem para 50% do seu tamanho original efetivamente calculará a média de blocos de 4 pixels para criar um novo pixel (assumindo que o tamanho da imagem seja um múltiplo de 2 também).Cautela é aconselhada, no entanto, pois uma imagem reduzida por scale também pode gerar padrões de Moiré, a menos que a nova imagem seja uma redução inteira exata (uma técnica conhecida como 'binning'), o que também requer que o tamanho da imagem original seja algum múltiplo inteiro exato do tamanho final. Além disso, uma fotografia do mundo real que foi fortemente reduzida usando "[-scale](https://imagemagick.org/command-line-options/#scale)" tende a parecer excessivamente nítida, com efeitos de aliasing ('escada') ao longo de bordas nítidas. A média de pixels do "[-scale](https://imagemagick.org/command-line-options/#scale)" permite que ele gere imagens 'pixelizadas'. Você basicamente reduz o tamanho da imagem para fazer a média dos pixels, e depois amplia novamente de volta ao tamanho original da imagem.
magick rose: -scale 25% -scale 70x46\! rose_pixelated.gif
Você pode usar uma máscara para combinar a imagem pixelizada acima com a imagem original, de modo a 'esconder' uma parte 'imprópria' muito menor presente na imagem original. Veja o exemplo Protect Someones Anonymity para uma demonstração do uso dessa técnica. O algoritmo também foi projetado para iterar sobre linhas de pixels e depois colunas, o que é invertido em relação ao do "[-resize](https://imagemagick.org/command-line-options/#resize)". Isso pode permitir que o "[-scale](https://imagemagick.org/command-line-options/#scale)" lide melhor com uma imagem em cache de disco "mpc:". |
Até o IM v6.4.7, o "[-scale](https://imagemagick.org/command-line-options/#scale)" ainda continha o antigo Resize Halo Bug. |
|---|---|
Detalhes Internos do Scale (mistura de pixels)...De muitas maneiras, o Operador Scale é semelhante ao Operador Resize normal, mas usando um filtro de reamostragem '[Box](filter.html#box)' Filtro de Reamostragem. No entanto, ele na verdade usa um algoritmo completamente diferente que é ligeiramente mais preciso em seus resultados do que aquele produzido por um Filtro Box. A maneira como o Filtro Box funciona é simplesmente calcular a média de qualquer pixel (amostra) que caia dentro da 'janela de suporte' do filtro (Veja Filter Support Expert Control. Isso significa que, ao reduzir uma imagem por uma quantidade muito pequena, um Resize filtrado por Box produzirá apenas valores de pixel exatos, ou um valor de pixel perfeitamente médio. O Operador Scale, no entanto, usa um algoritmo diferente que é conhecido (na falta de um nome melhor) como Pixel Mixing. Em vez de gerar as cores com base em uma 'média de pixels', dentro da 'janela de suporte', ele usa uma 'área de pixels' mais precisa dentro da janela de suporte. Por exemplo, aqui eu pego um padrão de pixels de 'tabuleiro de xadrez' e o reduzo em 2 pixels, comparando o resultado do Scale com o redimensionar usando os Filtros Box e Triangle muito simples. |
magick -size 10x10 pattern:gray50 checks.gif
magick checks.gif -filter box -resize 8x8 checks_box.gif
magick checks.gif -scale 8x8 checks_scale.gif
magick checks.gif -filter triangle -resize 8x8 checks_triangle.gif
![[IM Output]](../static/img/resize/checks_mag.gif)
'hash' de 10 pixels | | ![[IM Output]](../static/img/resize/checks_box_mag.gif)
Resize com
Filtro Box | ![[IM Output]](../static/img/resize/checks_scale_mag.gif)
Scale com
Pixel Mixing | ![[IM Output]](../static/img/resize/checks_triangle_mag.gif)
Resize com
Filtro Triangle
---|---|---|---|---
As imagens acima foram grandemente ampliadas
O exposto acima mostra o resultado que você obtém para 'média pura', vs, 'pixel mixed', vs, 'interpolação linear'. Também mostra como o Operador Scale é na verdade semelhante ao de um Filtro Triangle, mas apenas ao fazer reduções muito pequenas de imagens. Em outros casos (redução forte, ampliação, ou dimensionamento inteiro exato) ele produzirá resultados mais parecidos com os de um Filtro Box. Basicamente, ele gera algo que é mais como uma mistura entre os filtros Box e Triangle, dependendo de exatamente quanto a imagem é reduzida em tamanho. Você vê efeitos semelhantes ao ampliar.
magick -size 8x8 pattern:gray50 checks_sm.gif
magick checks_sm.gif -filter box -resize 10x10 checks_sm_box.gif
magick checks_sm.gif -scale 10x10 checks_sm_scale.gif
magick checks_sm.gif -filter triangle -resize 10x10 checks_sm_triangle.gif
![[IM Output]](../static/img/resize/checks_mag.gif)
'hash' de 10 pixels | | ![[IM Output]](../static/img/resize/checks_sm_box_mag.gif)
Resize com
Filtro Box | ![[IM Output]](../static/img/resize/checks_sm_scale_mag.gif)
Scale com
Pixel Mixing | ![[IM Output]](../static/img/resize/checks_sm_triangle_mag.gif)
Resize com
Filtro Triangle
---|---|---|---|---
As imagens acima foram grandemente ampliadas
Ao ampliar, um Filtro Box nunca produzirá 'pixels com média', apenas duplicações de linhas/colunas de pixels. O Scale, no entanto, gerará pixels de cor com média ao longo das bordas, novamente muito parecido, mas não exatamente igual a um Filtro Triangle. Claro que esse efeito só é realmente visível para ampliações pequenas e não inteiras, e em escalonamentos maiores, apenas ao longo das bordas onde, em um caso mais típico, você pode obter um ou dois pixels com média. Em resumo: o Scale é muito muito mais rápido que o Operador Resize normal, pois é menos geral em seus requisitos de processamento de imagem. Mas também é um algoritmo completamente diferente, produzindo um resultado ligeiramente diferente quando usado para redimensionar imagens usando escalas não inteiras. Para mais detalhes, veja a página Pixel Mixing, bem como a Discussão dos Fóruns do IM, Upscaling a few pixels linearly. Agradecimentos especiais ao usuário do fórum atnbueno, que apontou a diferença acima. Sample - Redimensionar por replicação/exclusão de linha/colunaO operador de resize "-sample" é o operador de resize mais rápido, especialmente na redução de imagem em grande escala. Na verdade, ele é até mais rápido que o operador "[-scale](https://imagemagick.org/command-line-options/#scale)" (veja acima). Ao ampliar ou aumentar uma imagem, ele apenas realiza replicação de pixels (como o Filtro Box), gerando 'blocos' retangulares de cores de pixels. No entanto, ao reduzir uma imagem, o "[-sample](https://imagemagick.org/command-line-options/#sample)" simplesmente exclui linhas e colunas de pixels. Como linhas e colunas inteiras de pixels são simplesmente adicionadas ou removidas, o "[-sample](https://imagemagick.org/command-line-options/#sample)" não gerará nenhuma cor nova ou adicional. Esse fato pode ser importante para algumas técnicas de processamento de imagem, como redimensionar animações GIF. Outra maneira de ver isso é que a imagem tem pixels individuais 'amostrados' em um padrão muito uniforme e regular por toda a imagem. Você pode pensar na imagem como sendo dividida em um array de regiões, e um pixel de cada região é selecionado para a imagem resultante. No entanto, essa 'amostragem' de pixels individuais (ou remoção total de linha/coluna) pode ter resultados bastante horríveis, especialmente para imagens contendo linhas finas (em termos de largura em pixels). Por exemplo, aqui eu desenho uma linha, mas depois reduzo o tamanho da imagem, resultando em apenas uma linha de pontos.
magick -size 150x60 xc: -draw 'line 0,59 149,0' line_orig.gif
magick line_orig.gif -sample 50x20 line_sample.gif
| Este é um efeito típico que você obtém com a amostragem de imagem, e é conhecido como um efeito severo de Aliasing. Deslocamento do Pixel AmostradoA partir do IM v6.8.4-7, o pixel exato sendo amostrado em cada sub-região de amostragem é agora definido como sendo o pixel no ponto médio de cada região (ou o pixel central superior-esquerdo se a sub-região for um número par de pixels). Isso significa que se você fizer uma única amostra de pixel de uma imagem, você obterá o pixel do meio da imagem. | Antes do IM v6.8.4-7, o pixel selecionado era o pixel superior-esquerdo de cada região. No entanto, há relatos de alguma versão onde isso pode ter sido o inferior-direito, ou pode até ter sido ligeiramente variável devido a bugs. |
|---|---|
Esse tipo de informação é especialmente útil para imagens que estão sendo reduzidas por uma divisão inteira do tamanho original da imagem. Como quando você está criando ou amostrando uma imagem pixelizada, ou De-interlacing a Video Frames. Além disso, a partir dessa versão, você pode controlar exatamente qual pixel em cada sub-região é selecionado usando o define "sample:offset, que recebe um ou dois valor(es) de porcentagem ('50' por padrão para o ponto médio). Note que uma porcentagem é usada, pois no caso geral as 'sub-regiões de amostragem' podem não se alinhar com os limites dos pixels. Ou seja, é por isso que uma porcentagem é necessária e não um 'deslocamento de pixel'. No entanto, se o tamanho da imagem for bem divisível pelo número de amostras, então você pode calcular facilmente exatamente qual pixel você quer de cada sub-região. Por exemplo, se uma imagem amostrada de modo que você tenha sub-regiões de 5 pixels, então (Por exemplo, amostrando uma imagem que tem 100 pixels de largura, reduzida para 20 amostras de pixels), então você pode usar uma porcentagem de deslocamento de amostragem na faixa de 0 a 19.9 para selecionar o primeiro pixel em cada região, 20.1 a 39.9 para o segundo, e assim por diante. Em outras palavras, você pode usar um valor de porcentagem de 10, 30, 50, 70 e 90 para especificar exatamente qual pixel você quer de cada região de amostragem de tamanho constante. Para mais sobre deslocamentos de amostragem, veja a discussão do Fórum do IM Sample Points. Magnify - Escalonamento de PixelA opção "-magnify" dobra o tamanho de uma imagem, mas o faz usando uma técnica conhecida como "Pixel Scaling" usando o algoritmo Scale2X. Esse algoritmo tenta suavizar os cantos dos pixels sendo ampliados, sem adicionar cores extras. Assim, imagens pixelizadas muito pequenas ampliam de forma mais limpa, mantendo as cores originais e um "visual de pixel retrô" da imagem menor. |
magick -size 8x8 pattern:CrossHatch30 -virtual-pixel tile \
-magnify -magnify -magnify magnify_crosshatch.gif
| Note que a configuração Virtual Pixel foi usada para garantir que o magnify entendesse que esta imagem específica 'envolve' (wraps around) as bordas da imagem. | Antes do IM v6.8.4-10, o magnify era apenas um invólucro em torno do resize para dobrar o tamanho da imagem. Não muito útil e raramente usado. Usar "Pixel Scaling" torna esta opção muito mais útil. Veja o fórum de usuários do IM sobrePixel Scaling para mais informações. |
|---|---|
Uma função "Minify()" também está frequentemente disponível em APIs que reduzem pela metade o tamanho das imagens, mas é apenas um invólucro em torno do resize. No entanto, "-minify" não está disponível na API de linha de comando, pelo menos não no momento em que isto foi escrito. |
|
| --- | --- |
Adaptive Resize - Pequenos resizes sem desfoqueO operador "-adaptive-resize" usa o método especial Mesh Interpolation para redimensionar imagens. Por exemplo, aqui eu redimensiono uma linha simples, usando primeiro um "[-resize](https://imagemagick.org/command-line-options/#resize)" normal, e depois novamente usando "[-adaptive-resize](https://imagemagick.org/command-line-options/#adaptive-resize)". |
magick -size 50x50 xc: -draw 'line 0,49 49,0' line_orig2.gif
magick line_orig2.gif -resize 80x80 line_resize.gif
magick line_orig2.gif -adaptive-resize 80x80 line_adaptive.gif
Se você olhar para uma ampliação dos dois resultados...
Você pode ver que a imagem Adaptive Resized à direita tem uma aparência muito mais limpa e menos borrada do que a imagem produzida à esquerda usando o operador "[-resize](https://imagemagick.org/command-line-options/#resize)" normal. Basicamente, o operador evita o desfoque excessivo que um operador "[-resize](https://imagemagick.org/command-line-options/#resize)" pode produzir com mudanças de cor nítidas. Isso funciona bem para pequenos ajustes de tamanho de imagem, particularmente para ampliação, e especialmente com imagens com mudanças de cor nítidas. No entanto, como acontece com todos os métodos de interpolação de pixels, ele produzirá aliasing e efeitos de Moiré quando as imagens são ampliadas ou reduzidas em mais de 50%. Você também pode gerar o resultado exatamente equivalente usando uma operação Distort Resize, mas com as opções "-filter point -interpolate mesh". Ou seja, redimensionar a imagem usando um método simples de busca por Mesh Interpolation, em vez de um filtro de reamostragem mais complexo. Interpolative Resize - Redimensionar usando um Método de InterpolaçãoO operador "-interpolative-resize" é praticamente idêntico ao operador Adaptive Resize anterior. No entanto, este operador usará a configuração "[-interpolate](https://imagemagick.org/command-line-options/#interpolate)" atual em vez de um método de interpolação 'Mesh' fixo.
Se você usar uma configuração "[-interpolate](https://imagemagick.org/command-line-options/#interpolate)" de '[Nearest](misc.html#nearest)', você essencialmente obterá o equivalente a um Operador Sample. Da mesma forma, muitos dos outros Métodos de Interpolação Simples equivalerão a usar os equivalentes Filtros de Resize Interpolados. Mas há vários métodos de interpolação como o Mesh que não têm equivalência como filtro de resize.
Este também é um resize não escalado, o que significa que funciona muito bem para ampliações e reduções de pequena escala, mas ao reduzir em mais de 50% podem aparecer severos Efeitos de Aliasing, como mostrado nos outros 'operadores de resize por amostragem' acima. Liquid Rescale - Seam CarvingAssim como Sampling uma imagem redimensiona removendo ou duplicando diretamente colunas e linhas inteiras de uma imagem, o operador especial do IM "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" também remove ou duplica colunas e linhas de pixels de uma imagem para reduzir/ampliar uma imagem. A diferença é que ele tenta fazer isso de uma maneira mais inteligente. Primeiro, em vez de remover uma simples linha de pixels, ele remove uma 'costura' (seam) de pixels. Ou seja, a coluna (ou linha) que pode ziguezaguear pela imagem, em ângulos de até 45 graus. Segundo, ele tenta remover costuras que têm a 'menor importância' em termos do conteúdo da imagem. Como ele seleciona isso é em termos da energia da imagem, ou mais simplesmente, a quantidade de mudanças de cor que uma 'costura' específica envolve. A 'costura' com a menor quantidade de mudanças será removida primeiro, seguida por costuras de 'energia' mais alta, até que a imagem tenha o tamanho desejado. Para informações mais detalhadas sobre redimensionar líquido e seam carving, veja Wikipedia: Seam Carving, o YouTube Video Demo, e o PDF paper: Seam Carving for Content-Aware Image Resizing. Aqui, por exemplo, está o logo do IM sendo redimensionado para menor usando o operador "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" do IM.
magick logo: -resize 50% -trim +repage logo_trimmed.jpg
magick logo_trimmed.jpg -liquid-rescale 75x100%\! logo_lqr.jpg
magick logo_trimmed.jpg -sample 75x100%\! logo_sample.jpg
![[IM Output]](../static/img/resize/logo_trimmed.jpg)
Original | | ![[IM Output]](../static/img/resize/logo_lqr.jpg)
Liquid Resize | ![[IM Output]](../static/img/resize/logo_sample.jpg)
Sampled
---|---|---|---
Note como o "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" preservou o mago complexo, enquanto comprimia as partes menos complexas das estrelas e do título da imagem. Ele também comprimiu ligeiramente o pé direito do mago, produzindo um pequeno serrilhado na borda da capa, assim como fez com a varinha fina, mas simples, do mago. Por outro lado, a imagem Sample Resize simplesmente removeu colunas de pixels igualmente espaçadas, o que resultou na imagem inteira se tornando igualmente distorcida. As estrelas não são preservadas intactas e todas as bordas têm efeitos de aliasing distintos, mas uniformes. Basicamente, o "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" produzirá uma imagem 'espremida' geralmente com aparência melhor, sem gerar 'cores misturadas' extras ou desfoque da imagem. No entanto, você pode obter alguns efeitos de aliasing leves, mas localizados, em um ponto (a varinha do mago neste caso), em vez de espalhar esse efeito por toda a imagem. Ele também expandirá imagens, 'duplicando' as costuras encontradas dentro da imagem.
magick logo_trimmed.jpg -liquid-rescale 130x100%\! logo_lqr_expand.jpg
Como você pode ver, ele tenta primeiro dobrar a quantidade de espaço entre os vários objetos (onde pode), espalhando-os. Embora, neste caso, a estrela mais à esquerda e o 'm' fiquem distorcidos, pois as 'costuras' que passam por essas regiões de 'baixa energia' são agrupadas. Note, no entanto, que ele só duplicará cada costura uma vez e, por isso, a técnica começa a falhar quando as imagens são expandidas demais. Um método melhor é frequentemente redimensionar a imagem para maior primeiro, e depois usar o redimensionar líquido para reduzi-la ao tamanho desejado. Ou usar "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)" em várias etapas menores. Para mostrar melhor o efeito do "[-liquid-rescale](https://imagemagick.org/command-line-options/#liquid-rescale)", aqui está uma animação, à medida que a mesma imagem é redimensionada para uma imagem muito fina, e depois ampliada novamente. Esta animação foi criada usando o script de shell animate_lqr.
Novamente, note como ele tenta preservar as partes mais complexas da imagem, à medida que a imagem é comprimida em uma área cada vez menor. Ou seja, os espaços no título são preferencialmente comprimidos primeiro, depois o braço do mago, depois o lado direito do mago, deixando a parte central mais complexa do mago para o final. Olhe especialmente como as estrelas são empurradas juntas antes de serem finalmente afetadas pela remoção de pixels por reamostragem que o redimensionar líquido implementa. (Veja os problemas a seguir) Você pode pensar no redimensionar líquido como tentar comprimir uma imagem, como uma esponja, com as áreas abertas sendo comprimidas primeiro, deixando as partes volumosas e mais estruturadas para o final. Problemas do Seam Carving O Liquid Resize, ou Seam Carving, funciona puramente removendo pixels inteiros da imagem. Por isso, como o sampling, ele não gerará ou mesclará cores juntas, e linhas retas e padrões dentro da imagem podem ficar fortemente distorcidos pela operação. Basicamente, ele pode resultar em sérios Efeitos de Aliasing, a menos que algum método de suavização também seja aplicado. Geralmente, no entanto, os efeitos de aliasing serão agrupados e localizados nas áreas menos complexas da imagem, em vez de espalhados pela imagem. Esta é a única razão pela qual funciona tão bem! Como uma 'costura' pode ziguezaguear pela imagem, as costuras podem e frequentemente parecem contornar objetos complexos, removendo o espaço entre os objetos antes de tentar comprimir os próprios objetos. Note, por exemplo, como a palavra 'Image' na demonstração acima parece ser empurrada sob as outras letras no título sem muita distorção. No entanto, esse movimento lateral é limitado a ângulos de 45 graus. Para imagens com fundos 'ocupados' e objetos de primeiro plano menos 'ocupados', como fotos contendo rostos de pessoas, a função de energia pode assumir que o objeto de primeiro plano é menos importante que o fundo. Isso resulta em alguns efeitos colaterais sérios e prejudiciais, que podem exigir intervenção humana para resolver. | _O Liquid Rescaling é atualmente uma operação altamente experimental adicionada para o IM v6.3.8-4. Requer que a biblioteca delegada "liblqr" esteja instalada antes de funcionar para você.
Neste momento, nenhum controle de usuário especialista foi fornecido. Controles como modificar a função de energia de conteúdo usada, ou usar um filtro de preservação/remoção fornecido pelo usuário (ajustando essa função de energia), ou acesso às imagens intermediárias com seam carving e funções que a biblioteca também fornece. Presume-se que tais controles serão fornecidos em algum momento no futuro, à medida que os usuários os demandarem, e obtivermos mais controle interno das funções da biblioteca.
AVISO Não espere que isso permaneça exatamente como está implementado atualmente. É altamente experimental, e espera-se que mude e expanda em funcionalidade._
---|---
Distort Resize - redimensionar de forma livreTodos os métodos de resize acima têm uma limitação que mencionamos anteriormente: eles arredondarão o tamanho da nova imagem para um número inteiro de pixels, e então mapearão os pixels da imagem antiga para o novo array de pixels. Isso tem dois efeitos. Primeiro, ao redimensionar para um tamanho muito pequeno, a escala X pode não corresponder exatamente à escala Y da imagem resultante (uma proporção ligeiramente diferente). Essa diferença é mínima e, a menos que você fique muito pequeno, geralmente não é perceptível. O outro efeito é que você não pode redimensionar uma imagem para caber em uma área que contém uma borda de pixel parcial, o que pode ser importante em processamento posterior, como sobreposições de imagem. Também significa que você não pode usar o resize apenas para deslocar (translatar) uma imagem meio pixel para a direita (sem resize real), embora o algoritmo pudesse facilmente fazer isso. Com o IM v6.3.6, o Operador de Distorção Geral "[-distort](https://imagemagick.org/command-line-options/#distort)" permitirá que você faça isso e mais, usando seu método de distorção Scale-Rotate-Translate. Você também pode fazer isso usando uma distorção Affine baseada em movimentos de pontos de controle. Note, no entanto, que, como a borda da imagem pode conter pixels parciais, a imagem final provavelmente será 2 a 3 pixels maior do que você provavelmente esperaria. Os pixels extras ao redor serão misturados de acordo com a configuração atual de Virtual Pixel, que você normalmente define como transparente. Por exemplo, aqui eu redimensiono a imagem rose para 90% (.9) de seu tamanho original, sem rotação (0), reduzindo-a em torno do centro da imagem (o ponto de controle padrão se não especificado)... |
magick rose: -alpha set -virtual-pixel transparent \
+distort SRT '.9,0' +repage rose_distort_scale.png
![[IM Output]](../static/img/resize/rose_distort_scale.png)
Pode não parecer uma melhoria, na verdade tem bordas difusas, mas é um resize exato sem ajustes para um tamanho de imagem inteiro final, exatamente como você solicitou. Por causa disso, as bordas são difusas, pois as cores dos pixels estão sendo espalhadas por frações de um tamanho de pixel, e não apenas para inteiros. Note que eu usei a forma 'mais' de "[+distort](https://imagemagick.org/command-line-options/#distort)" para permitir que este operador de processamento da imagem defina corretamente o tamanho final e o deslocamento das imagens na Virtual Canvas, para processamento e camadas posteriores. Se esse deslocamento não for desejado, ele pode ser removido usando o operador "[+repage](https://imagemagick.org/command-line-options/#page)". Mas, se mantido no lugar, a localização real das imagens na tela maior será preservada, permitindo que você posicione a imagem exatamente da forma correta com suas 'bordas difusas'. Aqui eu a redimensionei de modo que o canto superior esquerdo (0,0) fosse movido .5 pixels para a direita (para .5,0) e o resto da imagem escalado em torno desse ponto de controle... |
magick rose: -alpha set -virtual-pixel transparent \
+distort SRT '0,0 .9 0 .5,0' +repage rose_distort_shift.png
![[IM Output]](../static/img/resize/rose_distort_shift.png)
Note que, como a borda superior não se moveu de fato, ela permaneceu relativamente nítida, enquanto todas as outras bordas ficaram difusas. Aqui está uma ampliação de pixel do canto superior, mostrando a transparência que foi adicionada pelo distort para fornecer o redimensionar sub-pixel... |
magick rose_distort_shift.png -crop 15x15+0+0 +repage \
-scale 600% rose_distort_shift_mag.png
![[IM Output]](../static/img/resize/rose_distort_shift_mag.png)
Você pode ver que a borda superior permaneceu nítida, enquanto a esquerda (e todas as outras bordas) agora estão semitransparentes. E esse é o ponto. Você tem controle exato do resize e da localização sub-pixel final da imagem resultante. Não apenas um ajuste quantizado da imagem redimensionada a um número inteiro de pixels. Ou seja, o distort é um reescalonamento e posicionamento exato da imagem em frações de um pixel, permitindo que você a encaixe precisamente em outras imagens. Isso pode se tornar especialmente importante ao trabalhar com vídeo, onde um resize impreciso de imagens incorporadas pode produzir efeitos 'bruscos'. | Tecnicamente, redimensionar imagem é uma forma simplificada deDistorção de Imagem, ambas técnicas de reamostragem de imagem. Sua técnica de filtragem de 2 passos muito rápida é limitada ao escalonamento de pixels alinhado ortogonalmente, e a um número inteiro de pixels no resultado final.
---|---
Affine, Transform A partir do IM v6.4.2-8, a configuração mais antiga "[-affine](https://imagemagick.org/command-line-options/#affine)" usada com os operadores "[-transform](https://imagemagick.org/command-line-options/#transform)" ou "[-draw](https://imagemagick.org/command-line-options/#draw)" fornece uma capacidade de resize de forma livre semelhante. No entanto, na realidade, é equivalente a chamar "[+distort](https://imagemagick.org/command-line-options/#distort)" com um método de distorção '[AffineProjection](distorts.html#affine_projection)'. Assim, todas as notas anteriores do Distort se aplicam. Requer mais matemática, tornando-o difícil de usar para o usuário típico. Geralmente, é melhor usar o método de distorção acima, que fornece vários métodos alternativos de especificar a distorção afim a ser aplicada.
Distort vs Resize
Se você realmente quer fazer uma comparação direta entre usar Distort vs Resize, você precisará limitar especificamente a distorção da imagem, de modo a corresponder exatamente à imagem redimensionada com a qual você a está comparando. Esta não é uma tarefa simples. Para facilitar isso, um Método de Distorção Resize especial foi adicionado ao IM v6.6.9-2. Aqui, por exemplo, eu amplio grandemente a "rose:" embutida usando um Resize rápido, e depois usando Distort...
magick rose: -filter Lanczos -resize 300x rose_resize.png
magick rose: -filter Lanczos -distort Resize 300x rose_distort.png
![[IM Text]](../static/img/resize/rose_resize.png)
Resize (Lanczos - Sinc) | ![[IM Text]](../static/img/resize/rose_distort.png)
Distort (Lanczos - Jinc)
---|---
Se você olhar ao longo da borda inferior da rose, verá que o Operador Distort na verdade produziu um resultado mais limpo e melhor do que o Operador Resize. Com muito poucos Artefatos de Blocking que são comuns ao ampliar imagens. Fora essa borda inferior, o resto da imagem é praticamente idêntico, mesmo quando comparado usando um script "[flicker_cmp](../static/img/scripts/flicker_cmp)". No entanto, lembre-se de que o Distort é muito mais lento que o Resize, pois usa uma técnica de Area Resampling mais direta, mas muito mais complexa, sem as otimizações de velocidade de 2 passos que o resize usa. | _A verdadeira diferença nas duas imagens acima é que oOperador Distort usa um método de filtro de Reamostragem de Área Elíptica bidimensional (também conhecido como filtragem ou reamostragem cilíndrica) para seu processamento de imagem. Isso é mais lento que o método de reamostragem unidimensional de dois passos usado por todos os outros métodos de resize mostrados nesta seção. É também por isso que ele produziu um resultado melhor ao longo da borda inferior diagonal da imagem rose ampliada acima. Não está limitado apenas à filtragem horizontal e vertical.
Você pode ver os efeitos que isso tem sobre o ringing nos exemplos em Ringing Artefacts.
_
---|---
Técnicas de Redimensionar
Redimensionar com Correção de Colorspace
Embora o resize funcione muito bem, a maioria das pessoas não o usa corretamente. Mesmo eu normalmente uso o resize diretamente nas imagens, como estão, e assim, tecnicamente, eu redimensiono imagens incorretamente. As imagens são normalmente armazenadas usando um colorspace não linear "sRGB", ou com correção de gama. Veja Human Color Perception para detalhes. Mas o resize (como a maioria dos outros operadores de processamento de imagem) é um processador matematicamente linear, que assume que os valores da imagem representam diretamente um brilho de cor linear. O colorspace "sRGB" basicamente contém uma correção de gama de aproximadamente 2.2. Na verdade, é mais complexo que isso, envolvendo duas curvas separadas. Veja wikipedia, sRGB e W3org, sRGB the Default Colorspace of the Internet. A partir da versão 6.7.5, o ImageMagick segue esta convenção e define o colorspace padrão das imagens (pelo menos para a maioria dos formatos de arquivo de imagem) como sRGB. Isso significa que simplesmente precisamos usar o "[-colorspace](https://imagemagick.org/command-line-options/#colorspace)" para transformar a imagem em um espaço linear antes de fazer o resize. |
Usar a correção de cor em uma versão Q8 de baixa qualidade do IM (vejaQuality) não é recomendado devido à perda de precisão que essa qualidade de baixa memória proporciona. |
|---|---|
| A imagem da NASA "Earth's City Lights" é um caso muito extremo onde os efeitos de colorspace não linear têm um grande impacto nos resultados de redimensionar a imagem. Aqui redimensionamos diretamente a imagem sem correção de colorspace... |
magick earth_lights_4800.tif -resize 500 earth_lights_direct.png
E aqui nós convertemos de um sRGB não linear para RGB linear, depois os redimensionamos, e os convertemos de volta novamente...
magick earth_lights_4800.tif -colorspace RGB -resize 500 \
-colorspace sRGB earth_lights_colorspace.png
Como você pode ver, as 'luzes' nas imagens estão muito muito mais brilhantes, pois não são tão fortemente influenciadas pelo colorspace não linear da imagem de origem. Embora a maioria das imagens não tenha um impacto tão grande quanto pode ser visto acima, ele está presente e pode ter muitos efeitos. O principal efeito que pode ser visto a partir dos efeitos não lineares do sRGB é que cores mais escuras são salvas como valores muito mais escuros (para serem mais perceptualmente relevantes). Mas, como são mais escuras, elas não são processadas corretamente matematicamente, então a imagem sRGB resultante é mais escura do que uma imagem processada em colorspace linear como RGB (ou LAB ou LUV). Veja também Color Processing Real Images e Drawing with Gamma and Colorspace Correction. O mesmo tratamento correto de colorspace também se aplica ao uso de distort (filtro elíptico), desfoque de imagem, e pode ter grandes efeitos na quantização de imagem, dithering e dithering ordenado. Isso é analisado em detalhe em filtros de reamostragem. AVISO: o colorspace RGB pode produzir problemas de clipping ao longo das bordas envolvendo fortes mudanças de cor primária (não apenas entre preto e branco). Veja a próxima seção. | |
---|---|---
Em versões do IM mais antigas que a v6.7.5, nas quais o colorspace de entrada padrão era 'RGB'. O colorspace 'sRGB' na verdade significava "convertido de sRGB para RGB-linear". O resultado era que os dois rótulos eram trocados! Estranho, mas verdadeiro. Por causa disso, versões mais antigas do ImageMagick precisariam fazer a correção de colorspace acima com aqueles nomes de colorspace trocados. Assim... |
magick earth_lights_4800.tif -colorspace sRGB \
-resize 500 -colorspace RGB earth_lights_colorspace.png
* Este exemplo está obsoleto ***
Note que a operação "-colorspace RGB" não era realmente necessária, pois era realizada automaticamente ao salvar no formato de arquivo de imagem PNG. O exposto acima foi desenvolvido a partir de uma Discussão do Fórum do IM Correct Resize.
Redimensionar com Correção de Gama
Esta é a forma de redimensionar imagens corretamente usando apenas correção de gama.
magick earth_lights_4800.tif -gamma 0.454545 \
-resize 500 -gamma 2.2 earth_lights_gamma.png
Uma alternativa à operação inversa de gama "-gamma 0.454545" é usar "-evaluate POW 2.2". Note que a correção de gama é apenas uma correspondência aproximada à conversão adequada de imagens de/para o colorspace sRGB, mas é tão próxima que você teria dificuldade em ver qualquer diferença entre correção de colorspace vs correção de gama. A correção de gama também não mexe com as configurações de colorspace RGB/sRGB do IMv7, então pode ser uma escolha melhor quando a versão exata pode ser desconhecida. Você também pode gostar de olhar o operador "[-auto-gamma](https://imagemagick.org/command-line-options/#auto-gamma)", que tenta ajustar a imagem de modo a produzir quantidades iguais de áreas claras e escuras (assumindo que a imagem esteja em um colorspace linear).
Redimensionar no colorspace LAB
Um problema com o uso de sRGB, RGB ou mesmo do colorspace XYZ para redimensionar ou para qualquer tipo de processamento de imagem é que os 3 canais de cor não representam apenas a cor, mas também a intensidade ou o brilho. Isso significa que, se um canal ficar distorcido (como por ser clipado), a cor do pixel também ficará distorcida e pode resultar em uma aparência estranha. O colorspace LAB não é apenas um colorspace linear, mas foi projetado de modo que a intensidade (canal L) seja separada de dois canais de cor (canais A e B). Isso significa que, se qualquer um dos canais ficar clipado, ele não gera distorção de cor. Também significa que geralmente nenhum dos canais está realmente próximo dos limites de clip, a menos que você lide especificamente com imagens em preto e branco puro, o que é incomum em imagens da vida real. Assim, processar imagens usando o colorspace LAB na verdade funciona melhor, e evita o clipping e a distorção de cor que você pode obter ao usar um colorspace RGB ou XYZ. | _Antes do IM v6.7.8-2, os valores LAB para os canais A e B eram armazenados usando inteiros com sinal, armazenados em um espaço de memória de inteiros sem sinal. Isso criava uma descontinuidade entre valores negativos e positivos, que não permitia que o processamento normal funcionasse, apenas conversões de formato de imagem.
Isso significava que, em versões mais antigas do IM, o processamento de imagem no colorspace LAB não funcionava, especialmente quando uma cor envolvendo valores positivos e negativos estava envolvida. Ou seja, ao trabalhar com cores que mudam entre azul-amarelo e vermelho-verde.
Após este lançamento, os valores foram armazenados internamente usando um bias de 50%, que removeu essa descontinuidade, permitindo assim que operações lineares funcionassem como esperado.
_
---|---
Para resize envolvendo filtros de reamostragem de 'aguçamento' (muito comumente usados), usar o colorspace Lab também moderará mudanças extremas de intensidade, que podem gerar Artefatos de Ringing excessivamente fortes (e com faixa clipada), nas cores RGB primárias. Por exemplo...
magick rose: -colorspace RGB -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_rgb.png
magick rose: -colorspace LAB -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_lab.png
![[IM Output]](../static/img/images/rose.png)
Original | | ![[IM Output]](../static/img/resize/rose_distort_rgb.png)
colorspace RGB | ![[IM Output]](../static/img/resize/rose_distort_lab.png)
colorspace LAB
---|---|---|---
Como você pode ver, enquanto a borda da rose foi clipada no colorspace RGB linear, ela não foi clipada no colorspace LAB. No colorspace RGB, a borda inferior da rose vê uma mudança de cor de quase branco puro para quase vermelho puro, causando uma forte mudança (negativa) nos canais 'verde' e 'azul'. Isso produz um efeito de ringing de 'lóbulo negativo' muito forte, que é então clipado no colorspace RGB. O resultado final é uma severa distorção de cor, devido ao efeito de aguçamento do filtro. No colorspace LAB, a mudança de branco para vermelho não é nem de longe tão forte, seja em intensidade ou nos canais de cor, e assim, embora obtenhamos um bom aguçamento na intensidade, nem ela nem os canais de cor são clipados, evitando assim a distorção de cor. O resultado é uma imagem redimensionada muito melhor, com um efeito de aguçamento mais apropriado do filtro. Simplesmente separando a intensidade da cor.
Redimensionar usando o colorspace LUV
A partir do IM v6.7.8-8, o IM também implementa um colorspace intimamente relacionado, o LUV. Ambos são projetados para serem perceptualmente uniformes (lineares), e até compartilham os mesmos resultados críticos do canal de intensidade 'L' ou 'Lightness', embora calculem os canais de cor de forma diferente. A principal diferença é que os eixos de cor do LUV foram ajustados de modo a ter deltas de cor (diferenças de cor) perceptualmente iguais, o que resulta em uma escala de cor ligeiramente diferente do colorspace LAB, embora a intensidade permaneça a mesma entre os dois. Veja Adams chromatic valence color space. Os resultados para resizes entre LAB e LUV são praticamente idênticos.
magick rose: -colorspace LUV -filter Lanczos -distort resize 300x \
-colorspace sRGB rose_distort_luv.png
Veja Colorspace para mais informações sobre esses dois colorspaces..
Resumo de Redimensionar usando colorspaces diferentes
Ou por que não usar LAB ou LUV para resize?
Bem, porque, assim como o sRGB, os colorspaces LAB e LUV são colorspaces perceptuais não lineares! E a matemática só deveria ser aplicada a valores lineares. Por exemplo, aqui estão os resultados de redimensionar a imagem "Earth's City Lights" no colorspace 'Lab'.
magick earth_lights_4800.tif -colorspace Lab -resize 500 \
-colorspace sRGB earth_lights_lab.png
O resultado é praticamente idêntico ao que você obtém se tivesse redimensionado diretamente no colorspace perceptual sRGB. Mas redimensionar em um colorspace perceptual é realmente uma coisa ruim? Na verdade, esse é um ponto discutível. Parece que evitar o clipping do canal de cor, enquanto o desvio de cor (mudanças desiguais em canais de cor diferentes) é menos importante. Mas, então, imagens LAB e LUV são lineares, perceptualmente! Assim, talvez misturar cores (que é o que os Filtros de Reamostragem realmente fazem) em um colorspace linear-perceptual possa na verdade ser uma coisa boa de se fazer. Apenas um último ponto: o sRGB é apenas perceptualmente linear em intensidade ao longo dos componentes de cor primária. Ele não é na verdade perceptualmente linear em cor, então permanece um colorspace ruim para fazer qualquer forma de redimensionar imagem. Nicolas Robidoux resumiu bem com... _Geralmente, os colorspaces de luz linear (RGB linear e XYZ) produzem halos escuros exagerados, e os colorspaces "perceptuais" (sRGB, LAB, LUV) produzem halos claros exagerados.
Se você pensar nisso por um minuto, isso faz total sentido, porque os colorspaces perceptuais empacotam muitos bits na extremidade mais escura do espectro de intensidade, e "esvaziam" a extremidade mais clara, de modo a imitar o HVS (Human Visual System). Então, 1 unidade de overshoot escuro leva você menos "longe" no sRGB do que no RGB linear, mas 1 unidade de overshoot claro leva você menos "longe" no RGB linear do que no sRGB.
A Sigmoidização (veja a seguir) trata os overshoots escuros e claros igualmente, e geralmente amortece os extremos de ambos.
_
Redimensionar usando um Colorspace Sigmoidal
Em uma longa discussão nos Fóruns de Discussão do ImageMagick, Sigmoidal minimization of resampling filter haloing. Uma nova técnica foi desenvolvida na qual, em vez de tentar redimensionar imagens em um espaço de cor linear, a imagem é redimensionada em um colorspace modificado usando o Operador Modificador de Cor Sigmoidal ([-sigmoidal-contrast](https://imagemagick.org/command-line-options/#sigmoidal-contrast)). Isso pode reduzir o clipping de halo extremo ou Artefatos de Ringing que podem se desenvolver ao longo de bordas muito nítidas. Por exemplo, aqui está uma sequência de técnicas de resize 'aprimoradas', que foram discutidas nos Fóruns de Processamento Digital de Imagem...
magick rose: -colorspace RGB -filter Lanczos -resize 200x \
-colorspace sRGB rose_resize_RGB.png
magick rose: -colorspace RGB -filter Lanczos -distort resize 200x \
-colorspace sRGB rose_distort_RGB.png
magick rose: -colorspace RGB +sigmoidal-contrast 6.5,50% \
-filter Lanczos -distort resize 200x \
-sigmoidal-contrast 6.5,50% -colorspace sRGB rose_sigmoidal_RGB.png
![[IM Output]](../static/img/resize/rose_resize_RGB.png)
Resize (linear normal) | ![[IM Output]](../static/img/resize/rose_distort_RGB.png)
Distort (cilíndrico) | ![[IM Output]](../static/img/resize/rose_sigmoidal_RGB.png)
Variação Sigmoidal
---|---|---
Essencialmente, o que o exemplo final acima faz é diminuir o contraste da imagem, comprimindo os cinzas de tons médios em uma faixa linear mais estreita, enquanto traz os valores extremos para mais longe das bordas de clipping, antes de redimensionar. Depois, ele remove essa modificação. Isso, por sua vez, desenfatiza os efeitos extremos dos valores de cor, enquanto ainda permite que o filtro processe os tons médios, de forma linear, de modo a reduzir as distorções de cor. De muitas maneiras, isso é semelhante a redimensionar imagens no colorspace não linear sRGB padrão (o que é uma prática comum demais), mas funciona igualmente bem tanto para artefatos de ringing claros quanto escuros. Ou seja, é simétrico sobre toda a faixa de valores de cor, enquanto que redimensionar no colorspace sRGB funciona apenas a partir da extremidade escura inferior da faixa de cor (valores azul e verde no exemplo acima). Ou seja, é uma técnica muito mais controlada.Também foi comentado que essa variação sigmoidal pode funcionar bem apenas para ampliações. Tente também valores diferentes para a intensidade do contraste sigmoidal (6.5 no exemplo acima) para imagens diferentes. Lembre-se, assim como com toda técnica de resize, os resultados são altamente subjetivos, e podem não ser bons para todos os tipos de imagem. | _A transformação sigmoidal essencialmente gera um colorspace não linear especial do tipo "faça você mesmo", que se baseia nos resultados anteriores obtidos ao usar um colorspace perceptual não linear (sRGB).
Note que redimensionar (distorcer) uma imagem com canais de cor não lineares no colorspace RGB pode levar a resultados ligeiramente diferentes em cada canal de cor. Isso resulta em um leve deslocamento de cor (em oposição a uma cor sendo clipada como vimos anteriormente).
Isto é um problema apenas com colorspaces não lineares com canais mistos de cor-intensidade, como o sRGB, ou um colorspace sigmoidal.
_
---|---
Redimensionar com Unsharp (USM) -- Técnica de Resize do Photoshop
Frequentemente, redimensionar imagens (seja menor ou maior) adiciona alguma imprecisão (Artefatos de Blurring) à imagem. Por causa disso, muitas pessoas gostam de brincar com os vários filtros (veja Filtros de Reamostragem), para tentar tornar os resultados mais nítidos. Mas isso pode adicionar outros Artefatos de Resize aos resultados da imagem. Um método que é comumente usado é aguçar a imagem após o resize. Normalmente, isso é feito usando a especial e estranhamente nomeada Operação Unsharp, que contém ainda mais controles para controlar a qualidade dos resultados. Por exemplo, vamos aplicar 'unsharp' nos resultados da imagem muito borrada filtrada por 'Spline'...
magick logo: -filter spline -resize 150x logo_spline.png
magick logo: -filter spline -resize 150x \
-unsharp 0x1 logo_spline_unsharp.png
![[IM Output]](../static/img/resize/logo_spline.png)
Spline | | ![[IM Output]](../static/img/resize/logo_spline_unsharp.png)
Com Unsharp
---|---|---
Como você pode ver, aguçar a imagem após o resize melhora os resultados. Olhando para as estrelas e os detalhes do chapéu em particular. Você obtém uma imagem muito boa e nítida, sem qualquer aliasing, ringing ou mesmo escurecimento de efeitos. Embora um Filtro Spline não seja um filtro particularmente bom para começar, este método de aguçar (na verdade 'unsharping') funcionará para QUALQUER filtro. Ele também fornece mais controles para ajustar finamente o resultado. Na verdade, é isso que o 'photoshop' faz para melhorar a qualidade de suas imagens redimensionadas, embora eu não saiba quais configurações ele usa para a Operação Unsharp. Uma técnica conhecida como USM O padrão do "GIMP" (radius=6, amount=0.5, threshold=0) para o unsharp é equivalente a "-unsharp 12x6+0.5+0", e isso está correto (a não ser por ignorar que o GIMP define um raio rígido com o dobro do sigma). No entanto, lembre-se de que você realmente não precisa especificar o raio do kernel no ImageMagick, então um valor de "-unsharp 0x6+0.5+0" funcionará melhor. Veja também o tópico do fórum do IM unsharp parameters in GIMP. O post Image Resizing sugere usar "-unsharp 0x0.75+0.75+0.008" como sendo bom para imagens maiores que 500 pixels. Enquanto uma discussão do Open Photography Forum Downsampling with ImageMagick sugere "-unsharp 1.5x1+0.7+0.02".
Redimensionar para Preencher um Espaço Dado
| Basicamente: Redimensionar uma imagem grande para preencher completamente um tamanho de imagem específico, mas recortando quaisquer partes da imagem que não se ajustem. | A partir do IM v6.3.8-3, uma nova flag de resize '^' permitirá que você faça isso diretamente como uma única etapa de resize. Estes exemplos representam um método alternativo que pode ser usado por usuários com versões mais antigas do IM. Veja Resize Fill Flag acima. |
|---|---|
| A solução é bastante complicada, pois o requisito normal do usuário ao redimensionar imagens é ajustar a totalidade de uma imagem em um tamanho dado. Como a proporção da imagem é preservada, isso deixa espaço extra, não utilizado, na área que você está tentando preencher. Aqui tentamos redimensionar uma imagem para preencher uma caixa de 80x80. |
magick logo: -resize 80x80\> \
-size 80x80 xc:blue +swap -gravity center -composite \
space_resize.jpg
![[IM Output]](../static/img/resize/space_resize.jpg)
No exposto acima, adicionamos uma tela de fundo para preencher as partes não utilizadas da caixa de resize, para mostrar o espaço que queríamos que a imagem preenchesse, mas ele não foi preenchido, pois preservou a proporção da imagem. Agora, se todas as suas imagens forem do estilo paisagem (são mais largas do que altas), então você pode, claro, apenas redimensionar a imagem para se ajustar à altura ou à largura da área, e depois usar "[-crop](https://imagemagick.org/command-line-options/#crop)" para cortar a imagem de modo a ajustá-la exatamente. |
magick logo: -resize x80 \
-gravity center -crop 80x80+0+0 +repage space_crop.jpg
![[IM Output]](../static/img/resize/space_fill.jpg)
O problema é que o exposto acima só tratará imagens do estilo paisagem. Ele falhará gravemente se a imagem for do estilo retrato (mais alta do que larga). Isso, claro, pode ser resolvido em um script obtendo primeiro as dimensões da imagem, e depois escolhendo o método certo para ajustar a imagem no espaço necessário. Mas uma solução melhor seria fazer o IM realizar todo o trabalho para todas as imagens. A solução dentro do IM é processar a imagem redimensionando cada uma das dimensões da imagem separadamente. Depois escolhendo a maior imagem dos dois resultados. Para facilitar isso, o próprio resize tem uma opção de teste embutida que só redimensionará uma imagem se isso a tornar maior. Isso nos permite uma solução muito engenhosa para o nosso problema. |
magick logo: \
-resize x160 -resize '160x<' -resize 50% \
-gravity center -crop 80x80+0+0 +repage space_fill.jpg
![[IM Output]](../static/img/resize/space_fill.jpg)
No exposto acima, o segundo resize da série só redimensionará se a largura produzida pelo primeiro resize for menor que a área que estamos tentando preencher. A ordem específica dos resizes (altura primeiro, depois largura) foi escolhida, pois a maioria das imagens são fotografias que normalmente são mais longas horizontalmente. Com a ordenação acima, tal caso resultará na segunda operação de resize sendo pulada. Se suas imagens são mais frequentemente imagens de retrato (mais longas verticalmente), então mude os argumentos para redimensionar a imagem pela altura primeiro, depois pela largura. Por exemplo... |
magick logo: \
-resize 160x -resize 'x160<' -resize 50% \
-gravity center -crop 80x80+0+0 +repage space_fill_2.jpg
![[IM Output]](../static/img/resize/space_fill_2.jpg)
O resultado de ambos esses exemplos deve ser muito semelhante, e o comando funcionará tanto para os estilos paisagem quanto retrato de imagem, embora funcione melhor para um tipo. O maior problema com este método é que a imagem agora está sendo redimensionada 2 a 3 vezes, produzindo desfoque extra e outros possíveis artefatos no resultado final. Para reduzir isso, os resizes iniciais são realizados com o dobro das dimensões finais, o que assume que a imagem original tem pelo menos 3 ou mais vezes o tamanho do resultado final desejado. Não é um problema para a produção de miniaturas, mas algo a se ter em mente.
Redimensionar Desenhos de Linha
Fazer um resize forte de uma imagem contendo linhas finas pode representar um grande problema... Redimensionar imagens para miniaturas muito pequenas faz com que linhas finas que têm apenas alguns pixels de largura desbotem e desapareçam no fundo. Isso pode ficar tão ruim que eu já vi miniaturas de um desenho de linha que pareciam completamente em branco! Ou seja, cada detalhe do desenho original 'desapareceu', tornando a miniatura bastante inútil. Se isso for um problema, há algumas técnicas que podem ajudar...
- Redimensionar e depois ajustar o contraste para tornar as linhas mais visíveis. Embora isso torne as linhas mais aliased (escadeadas). Também tem limites de até onde essa técnica pode ser usada.
- Desfocar e aplicar threshold na imagem (um método muito semelhante ao 'dilate' ou 'erode' morfológico) de modo a tornar as linhas de um único pixel cerca de 300% mais grossas. Agora, após redimensionar por 1/3, a imagem será menor, mas as linhas permanecerão tão fortes e visíveis como antes.
- Engrossar linhas usando técnicas de Thicken Morphology. Você pode gostar de fazer o resize em etapas, engrossando e redimensionando a imagem em 50% de cada vez até chegar ao tamanho final. Embora, à medida que o espaçamento entre as linhas diminui, você possa acabar com mais um 'borrão' do que um desenho de linha. Ou seja, você pode obter o problema oposto. Ajustar a proporção de engrossamento para resize, no entanto, deve produzir um resultado aceitável.
- Separar o contorno das linhas em uma imagem das áreas de cores sólidas, e redimensionar cada uma por métodos diferentes (linhas usando o método acima). Depois, as duas partes podem ser mescladas de volta, permitindo que você preserve o contorno das linhas da imagem. Isso, na prática, reproduzirá o efeito que você frequentemente obtém ao redimensionar imagens vetoriais.
- Converter a imagem em uma imagem vetorial e depois redimensionar. Isso pode ser complicado, mas também pode produzir o melhor resultado possível para redimensionar desenhos de linha, com bordas perfeitamente anti-aliased (nítidas) e imagens claras.
Se você descobrir alguma outra maneira de redimensionar desenhos de linha de forma eficaz, ou tentou algumas das técnicas acima, por favor me avise (e a outros usuários do IM) sobre isso.
![[IM Output]](../static/img/resize/dragon_sm.gif)
![[IM Output]](../static/img/resize/resize_dragon.gif)
![[IM Output]](../static/img/images/terminal.gif)
![[IM Output]](../static/img/resize/resize_terminal.gif)
![[IM Output]](../static/img/resize/exact_dragon.gif)
![[IM Output]](../static/img/resize/exact_terminal.gif)
![[IM Output]](../static/img/resize/shrink_dragon.gif)
![[IM Output]](../static/img/resize/shrink_terminal.gif)
![[IM Output]](../static/img/resize/fill_dragon.gif)
![[IM Output]](../static/img/resize/fill_terminal.gif)
![[IM Output]](../static/img/resize/fill_crop_dragon.gif)
![[IM Output]](../static/img/resize/fill_crop_terminal.gif)
![[IM Output]](../static/img/resize/half_dragon.gif)
![[IM Output]](../static/img/resize/half_terminal.gif)
![[IM Output]](../static/img/resize/scale_gray_norm.gif)
![[IM Output]](../static/img/images/rose.gif)
![[IM Output]](../static/img/resize/line_orig.gif)
![[IM Output]](../static/img/resize/line_sample.gif)
![[IM Output]](../static/img/resize/magnify_crosshatch.gif)
![[IM Output]](../static/img/resize/line_orig2.gif)
![[IM Output]](../static/img/resize/line_resize.gif)
![[IM Output]](../static/img/resize/line_adaptive.gif)
![[IM Output]](../static/img/resize/line_resize_mag.gif)
![[IM Output]](../static/img/resize/line_adaptive_mag.gif)
![[IM Output]](../static/img/resize/logo_lqr_expand.jpg)
![[IM Output]](../static/img/resize/animated_lqr.gif)
![[IM Text]](../static/img/resize/earth_lights_direct.png)
![[IM Text]](../static/img/resize/earth_lights_colorspace.png)
![[IM Text]](../static/img/resize/earth_lights_gamma.png)
![[IM Output]](../static/img/resize/rose_distort_luv.png)
![[IM Text]](../static/img/resize/earth_lights_lab.png)