⚠️ Este é um site de tradução não oficial, sem relação com a ImageMagick Studio LLC. Para informações oficiais, consulte a página original (https://usage.imagemagick.org/warping/index.html).

Exemplos do ImageMagick -- Deformação de Imagens

Prefácio e Índice dos Exemplos do ImageMagick
Deformação Simples de Imagens (reorganizar a ordem dos pixels)

Deformação Simples de Imagens

Os operadores de deformação simples de imagens apenas reorganizam os pixels da imagem. O número de pixels e até mesmo o tamanho da imagem permanecem os mesmos. A característica principal é que a imagem não perde nenhuma informação, apenas é reorganizada, e poderia facilmente ser restaurada ao estado normal sem qualquer perda de qualidade (excetuando a compressão com perdas do tipo JPEG na gravação). Basicamente, ele apenas reorganiza os pixels, sem destruir, sobrescrever, copiar, mesclar cores ou modificar de qualquer outra forma o conteúdo da imagem original. Apenas move as posições dos pixels dentro da imagem. [IM Output]

Inverter e Espelhar

Para estes exemplos vamos usar esta imagem fofa de um coala... A distorção de imagem mais simples é reorganizar os pixels da imagem de modo a "-flip", ou seja, virá-la de cabeça para baixo. |

  magick koala.gif  -flip  flip.gif

[IM Output]
Ou, usando "-flop", você pode gerar uma imagem espelhada. |

  magick koala.gif  -flop  flop.gif

[IM Output]
| Antes do IM v6.6.6-5, tanto o operador "[-flip](https://imagemagick.org/command-line-options/#flip)" quanto o "[-flop](https://imagemagick.org/command-line-options/#flop)" não modificavam o deslocamento da tela virtual da imagem em relação a uma tela virtual maior que pudesse estar presente
---|---

Transposição e Transversal, na Diagonal

As operações de imagem "-transpose" e "-transverse" produzem espelhamentos diagonais da imagem. O "-transpose" espelha a imagem ao longo da diagonal do canto superior esquerdo ao inferior direito. |

  magick koala.gif  -transpose  transpose.gif

[IM Output]
Já o "-transverse" espelha a imagem ao longo da diagonal do canto inferior esquerdo ao superior direito. |

  magick koala.gif  -transverse  transverse.gif

[IM Output]
| Antes do IM v6.6.6-5, tanto o operador "[-transpose](https://imagemagick.org/command-line-options/#transpose)" quanto o "[-transverse](https://imagemagick.org/command-line-options/#transverse)" não modificavam o deslocamento da tela virtual da imagem em relação a uma tela virtual maior que pudesse estar presente
---|---

Rotações Retangulares

Todos os quatro tipos de operação mostrados acima produzem, em essência, uma imagem espelhada do original. O operador "-rotate" fornece as demais versões não espelhadas da imagem, incluindo a própria imagem original.

  magick koala.gif  -rotate   0  rotate_0.gif
  magick koala.gif  -rotate  90  rotate_90.gif
  magick koala.gif  -rotate 180  rotate_180.gif
  magick koala.gif  -rotate -90  rotate-90.gif
  magick koala.gif  -rotate 360  rotate_360.gif

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

Observe que "-rotate" só é uma distorção simples se você usar um ângulo de rotação múltiplo de 90 graus. Qualquer outro ângulo introduz distorções mais complexas em nível de pixel na imagem. Veja Rotacionar abaixo. Você pode notar que um ângulo de rotação positivo é no sentido horário, o que parece logicamente incorreto. Internamente, porém, isso é matematicamente correto e decorre do uso de um eixo Y negado. Ou seja, o eixo Y vai de 0 no topo, tornando-se positivo para baixo. Por causa disso, o sistema de coordenadas é invertido e, assim, o ângulo de rotação também é invertido matematicamente.
Fotos digitais também podem ser rotacionadas para corresponder àOrientação da Câmera registrada usando o operador "-auto-orient". Isto foi adicionado no IM v6.2.7-8.
--- ---

Rolar Imagens como uma TV com defeito

Você também pode "-roll" (rolar) uma imagem horizontalmente (como uma TV fora de sincronia). A quantidade da rolagem (deslocamento da imagem) é dada em pixels. |

  magick koala.gif  -roll +0+20  roll_horiz.gif

[IM Output]
É claro que você também pode rolar a imagem lateralmente... |

  magick koala.gif  -roll +30+0  roll_vert.gif

[IM Output]
Ou, usando um número negativo de pixels, você pode rolá-la na direção oposta. |

  magick koala.gif  -roll +0-20  roll-horiz.gif

[IM Output]
As rolagens são particularmente importantes para Imagens em Mosaico, pois reposicionam a origem do ladrilho sem destruir a capacidade de ladrilhamento das imagens. Na verdade, é exatamente isso que a configuração "-tile-offset" define: quanta rolagem aplicar a uma imagem de mosaico à medida que ela é lida pela opção "-tile".

Resumo da Deformação Simples de Imagens

O aspecto mais importante de todos esses operadores é que você pode combiná-los de muitas maneiras diferentes, de modo que o resultado seja exatamente como se nenhuma operação tivesse sido realizada. |

  magick koala.gif -roll +25+0 -rotate 90  -flop \
          -roll +0-25  -flip  -rotate 90    original.gif

[IM Output]


Rotação e Cisalhamento

Enquanto os Operadores de Distorção Simples (acima) preservam o tamanho e a cor das imagens, o próximo conjunto não faz o mesmo. Os resultados desses operadores não cabem no tamanho original, nem sequer na grade rasterizada original da imagem.

Rotacionar Imagens -- Rotação Simples de Imagem

Como você viu acima, o operador "-rotate" pode realizar distorções simples que preservam a imagem quando você a rotaciona em unidades de 90 graus. Com outros ângulos, porém, a imagem rotacionada não caberá bem em uma imagem retangular. Consequentemente, para garantir que nenhum dado da imagem seja perdido, o tamanho da imagem final é ampliado o suficiente para acomodar a imagem rotacionada. |

  magick koala.gif -rotate 30 rotate.jpg

[IM Output]
Observe que a direção da rotação é no sentido horário. Isso pode parecer ilógico do ponto de vista matemático, até você perceber que o sistema de coordenadas da imagem é relativo ao canto superior esquerdo da imagem, em vez da norma matemática do canto inferior esquerdo. O resultado é que o ângulo de rotação é o oposto do que você poderia esperar logicamente. Isto é importante ter em mente ao lidar com qualquer forma de rotação de imagem, em comparação com uma rotação matemática. O espaço extra adicionado pelo ImageMagick é colorido com a configuração de cor "-background" atual. Isto permite especificar a cor a ser preenchida nos cantos. |

  magick koala.gif -background lightskyblue -rotate 30 rotate_color.png

[IM Output]
É claro que, se você quiser preencher com a cor transparente, precisará garantir que a imagem consiga lidar com transparência (habilitando a adição de um Canal Alfa) e que seja salva em um formato de imagem capaz de lidar com transparência. |

  magick koala.gif -alpha set -background none -rotate 30 rotate_trans.png

[IM Output]
Se o espaço extra sair preto, então o formato de saída da sua imagem não permite o uso de um canal alfa (muito provavelmente o formato JPEG), de modo que a transparência assume o preto por padrão. | Antes da versão 6.1.2, o "-rotate" não lidava corretamente com a transparência, produzindo faixas de preto e transparente nos cantos da imagem rotacionada. A solução alternativa para esse problema era bastante complexa, envolvendo rotacionar o canal alfa separadamente das cores.
---|---
Mas e se você não quiser esse espaço extra e desejar preservar o tamanho original da imagem? Bem, você pode usar um "-crop" centralizado para retornar a imagem ao seu tamanho original. Se você não souber qual era o tamanho original, pode usar um truque de composição alfa (veja o método de composição '[Src](compose.html#src)') para restaurar a imagem ao seu tamanho original. |

    magick koala.gif -alpha set \( +clone -background none -rotate 30 \) \
            -gravity center  -compose Src -composite   rotate_resized.png

[IM Output]
O operador "-rotate" também entende duas flags extras. Se um símbolo '>' for adicionado ao argumento de rotação (antes ou depois do número), então a imagem só será rotacionada se for mais larga do que alta. Ou seja, um '90>' só rotacionará imagens no estilo 'paisagem' (largas) para o estilo 'retrato' (altas), de modo que todas as imagens fiquem no estilo 'retrato'. A outra flag '<' faz o oposto, rotacionando apenas imagens que são mais altas do que largas. Por exemplo, '90<' garantirá que todas as imagens fiquem em 'paisagem'. Outro uso dessa flag é rotacionar imagens 'retrato' e 'paisagem' em quantidades diferentes. Ou seja, você pode simplesmente fornecer duas operações "-rotate" diferentes, de modo a inclinar as imagens 'retrato' em uma direção e as 'paisagem' em outra. Fotos digitais também podem ser rotacionadas para corresponder à Orientação da Câmera (com base nos metadados EXIF da imagem) usando o operador "-auto-orient". Lembre-se, porém, de que salvar novamente em formato JPEG pode não ser uma boa ideia.

Detalhes Internos do Operador de Rotação

A partir do IMv6.7.3-4, o Operador de Rotação agora usa o Operador de Distorção e a Distorção Scale-Rotate-Translate (SRT). Aqui está a rotação mais direta, usando a Distorção SRT subjacente. |

  magick koala.gif -virtual-pixel background -background lightskyblue \
          -distort SRT 30 +repage rotate_srt.jpg

[IM Output]
Ou usando a versão '+' do operador de distorção para ajustar o tamanho da tela. |

  magick koala.gif -virtual-pixel background -background lightskyblue \
          +distort SRT 30 +repage rotate_srt2.jpg

[IM Output]
Existem muitos outros controles fornecidos pelo Operador Geral de Distorção para coisas como posicionamento exato do centro de rotação, escala, controle de filtro, tamanho da imagem de saída e controles para Camadas de Imagem, que o Operador de Rotação, mais simples, não oferece. Antes do IMv6.7.3-4, o Operador de Rotação era implementado usando Distorções de Rotação Simples de 90 graus seguidas de três Cisalhamentos de Imagem, uma técnica conhecida como 'Rotação por Cisalhamento' (Rotate by Shear, RBS). Uma técnica publicada pela primeira vez em artigos de pesquisa por Alan Paeth. Infelizmente, como isso requer 3 operações de cisalhamento separadas, você obtém efeitos de desfoque altamente variáveis e severos, especialmente ao cisalhar linhas finas, razão pela qual a rotação agora é implementada usando Distorção. Você pode ver os efeitos prejudiciais disso nas Animações de rotação abaixo. A função de biblioteca que fazia rotações como 'cisalhamentos' ainda está disponível na API, mas não está mais disponível a partir da linha de comando, a menos que você mesmo faça os cisalhamentos. Veja o Operador de Cisalhamento abaixo para os detalhes completos da técnica. Para uma compreensão mais aprofundada dos diversos algoritmos de rotação de imagem, de como funcionam e das questões envolvidas, consulte Leptonica Rotation. E os exemplos usados em Técnicas Gerais de Distorção.

Cisalhar Imagens -- Deslocamento linear

O operador "-shear" pega cada linha (ou coluna) de pixels e as desliza de modo que cada linha (ou coluna) seja deslocada pela mesma quantidade em relação à linha (ou coluna) vizinha. Seus dois argumentos são dados em termos de ângulos. Assim como no "-rotate", a operação aumenta o tamanho da imagem resultante para não perder nenhuma informação. No entanto, o cisalhamento é mais complexo, pois na verdade é uma operação dupla.

  magick koala.gif -background Blue  -shear 20      shear_rot.gif
  magick koala.gif -background Blue  -shear 20x0    shear_x.gif
  magick koala.gif -background Blue  -shear 0x50    shear_y.gif
  magick koala.gif -background Blue  -shear 20x50   shear_xy.gif
  magick koala.gif -background Blue  -shear 20x0  -shear 0x50   shear_xy2.gif
  magick koala.gif -background Blue  -shear 0x50  -shear 20x0   shear_yx.gif

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

Se você observar os resultados, verá que um "-shear" X-Y completo (quarta imagem) é, na verdade, equivalente a fazer o cisalhamento em X primeiro, seguido do cisalhamento em Y (com o recorte de imagem apropriado), como mostrado na quinta imagem, ou penúltima imagem. Observe que a ordem dos cisalhamentos produz resultados diferentes. Se apenas um número for fornecido (sem nenhum 'x' no argumento, como na primeira imagem), então o "-shear" o aplicará tanto na direção X quanto na Y, como uma espécie de rotação de pobre. A configuração de cor "-background" é, claro, usada como cor do espaço extra adicionado. |

  magick koala.gif  -background none  -shear 30  shear_trans.png

[IM Output]
| Antes da versão 6.1.2 do IM, o "-shear" não lidava com transparência. A solução alternativa para esse problema era bastante complexa, envolvendo cisalhar o canal alfa separadamente das cores.
---|---
Observe que usar um "-shear" dessa forma não é um método correto para rotacionar uma imagem. Para realmente usar o cisalhamento para rotacionar uma imagem corretamente, você precisaria realizar múltiplas operações de cisalhamento na forma "-shear {X}x{Y} -shear {X}x0 -crop ... ", porém calcular os valores adequados para '{X}', '{Y}' e o recorte final exige um pouco de trigonometria. O "Operador de Rotação" costumava, de fato, ser implementado dessa maneira, e a função da API que faz isso ainda está disponível, mas não mais a partir da linha de comando. | Observe que o cisalhamento na direção X não afetará a altura da imagem, enquanto o cisalhamento na direção Y não afetará a largura da imagem. O resultado é que a área coberta por algum objeto dentro da imagem não mudará (apenas o contêiner ao redor que contém a imagem).
---|---
| _OOperador de Cisalhamento é implementado como uma 'deformação' direta (distorcendo os pixels apenas em linhas e colunas individuais) da imagem de origem. Como consequência, ele não usa a Configuração de Interpolação nem a Configuração de Pixel Virtual.

Como resultado, as áreas adicionadas à imagem são preenchidas apenas pela cor "-background" atual, e não há método fornecido para preservar as cores originais da imagem._
---|---
Para um método alternativo que permite o uso de filtros de imagem, interpolação e pixels virtuais, veja Distorção Afim. Para informações sobre o uso de Matrizes Afins para implementar cisalhamentos, veja Cisalhamento Afim. Nenhum dos métodos, porém, permite especificar os cisalhamentos usando argumentos de ângulo.

Cubo Isométrico usando Cisalhamentos

Embora os cisalhamentos não sejam os operadores mais agradáveis ou simples de usar, isso não significa que você não possa fazer coisas sofisticadas com eles. O exemplo a seguir usa "-shear" para criar um cubo isométrico. |

  # Criar algumas imagens quadradas para o cubo
  magick logo: -resize 256x256^ -gravity center -extent 256x256 top.jpg
  magick ../img_photos/pagoda_sm.jpg           -resize 256x256 left.jpg
  magick ../img_photos/mandrill_orig.png       -resize 256x256 right.jpg

  # cisalhamento da imagem superior.
  magick top.jpg -resize  260x301! -alpha set -background none \
          -shear 0x30 -rotate -60 -gravity center -crop 520x301+0+0 \
          top_shear.png

  # cisalhamento da imagem da esquerda
  magick left.jpg  -resize  260x301! -alpha set -background none \
          -shear 0x30  left_shear.png

  # cisalhamento da imagem da direita
  magick right.jpg  -resize  260x301! -alpha set -background none \
          -shear 0x-30  right_shear.png

  # combiná-las.
  magick left_shear.png right_shear.png +append \
          \( top_shear.png -repage +0-149 \) \
          -background none -layers merge +repage \
          -resize 30%  isometric_shears.png

  # limpeza
  rm -f top.jpg left.jpg right.jpg
  rm -f top_shear.png left_shear.png right_shear.png

[IM Output]
O exemplo acima foi desenvolvido a partir de um Exemplo em Batch do Windows semelhante, de Wolfgang Hugemann ImageMagick@Hugemann.de, em sua contribuição Using IM under Windows aos Exemplos do IM. Observe que as imagens acima NÃO estão corretamente unidas. Elas deveriam usar a Composição Alfa Plus, mas estão usando over em vez disso. Para mais informações, veja Alinhando Duas Imagens Mascaradas. Como resultado, você pode ter problemas para alinhar corretamente as três imagens, produzindo lacunas ou sobreposições de imagem. Como o posicionamento está restrito a posições inteiras, esse problema pode ser especialmente grave. Usar um tamanho bem maior, com coordenadas mais fáceis de gerenciar, e um pequeno ajuste nos cálculos pode ajudar nesse caso. Depois que as imagens forem mescladas, redimensionar o resultado para seu tamanho final vai suavizar e limpar quaisquer pequenos desalinhamentos ao longo das junções. Outro exemplo semelhante, mas usando Distorções Afins e composição alfa correta, é Cubos 3D, usando Camadas Afins. Um método que simplifica bastante o processamento de imagem necessário para gerar cubos como o acima.

Ondular Imagens - Deslocamento por Onda Senoidal

O operador "-wave" é como o "-shear", no sentido de que adiciona um 'deslocamento linear' às imagens. No entanto, este operador só desloca colunas de pixels verticalmente, de acordo com uma função de onda senoidal. Há dois argumentos para o operador "-wave". O primeiro é a altura máxima, ou amplitude, com que os pixels serão deslocados para cima ou para baixo, enquanto o segundo é o comprimento de onda da função senoidal, em pixels. |

  magick koala.gif -background Blue  -wave 10x64  wave.jpg

[IM Output]
Observe que, como os pixels podem ser deslocados até a amplitude fornecida, essa quantidade de espaço extra sempre será adicionada tanto no topo quanto na base da imagem, mesmo que esse espaço não seja realmente necessário. Por exemplo, ajustando os argumentos de modo que o comprimento de onda seja o dobro da largura da imagem, você pode transformar a imagem em um arco. |

  magick koala.gif -background Blue  -wave 20x150  arched.jpg

[IM Output]
Nesse tipo de caso, o espaço não utilizado pode ser removido usando uma operação "-chop", "-shave" ou, possivelmente, até "-trim". Vamos limpar o exemplo anterior usando uma amplitude negativa para virar o arco ao contrário e usar "-chop" para remover o espaço não utilizado que o operador "-wave" adicionou. |

  magick koala.gif -background Blue  -wave -20x150  \
          -gravity South -chop 0x20 arched_2.jpg

[IM Output]
É claro que a configuração de cor "-background" pode ser usada para definir o espaço extra adicionado à imagem. |

  magick koala.gif -alpha set -background none  -wave 10x75  wave_trans.png

[IM Output]
Como você pode ver nos exemplos acima, o "-wave" só se aplica na direção vertical ou 'Y'. Se você quiser adicionar uma onda na direção X, precisará rotacionar a imagem antes e depois de aplicar a onda. |

  magick koala.gif  -rotate -90 -background Blue  -wave -10x75 \
                     -rotate +90  wave_y.jpg

[IM Output]
A técnica pode ser usada para adicionar um padrão de onda ou vibração a uma imagem em qualquer ângulo. Exemplos disso são dados na Fonte Vibrato e na Fonte Smoking. Outra limitação do "-wave" é que a onda só começa em zero. Ou seja, a coluna mais à esquerda não é deslocada, enquanto as próximas linhas são deslocadas para baixo (direção X positiva), a menos que você forneça uma amplitude negativa para um deslocamento vertical inicial. Basicamente, o operador "-wave" não permite (por enquanto) que você especifique um deslocamento para o início da função senoidal. Isso pode ser corrigido, porém, adicionando e depois removendo um deslocamento de imagem usando "-splice". |

  magick koala.gif  -splice 19x0+0+0 -background Blue  -wave 10x75 \
                     -chop   19x0+0+0     wave_offset.jpg

[IM Output]
Embora o "-wave" não faça uso da Configuração de Pixel Virtual atual para definir a cor das áreas adicionadas, ele levará em conta a Configuração de Interpolação atual para mapear as cores da origem para a imagem gerada. Isso significa que a onda tenderá a desfocar levemente os pixels em faixas verticais ao longo da imagem.


Distorções Circulares

Até agora, as distorções de imagem têm sido bastante suaves, com muito pouco esticamento, expansão ou compressão dos dados da imagem. Ou seja, os dados permanecem praticamente inalterados. Estes próximos operadores de imagem podem resultar em uma imagem tão distorcida que a imagem original não pode ser identificada. As cores são torcidas em uma bagunça borrada. Acontece também que eles limitam os efeitos de distorção a uma área circular, com pouca ou nenhuma distorção da imagem original na borda do retângulo da imagem. Isso significa que você pode usar esses operadores em uma área menor com o Operador de Região, e o resultado ainda se mesclará à imagem original sem parecer que foi recortado, deformado e colado de volta no lugar. Ou seja, esses operadores são conhecidos como distorção 'local', pois podem ser usados para deformar áreas menores de uma imagem.

Implodir Imagens

O operador "-implode" deforma a imagem de modo a puxar todos os pixels em direção ao centro. É como enfiar um aspirador, ou 'buraco negro', no centro da imagem e sugar os pixels em sua direção. No entanto, recomenda-se cautela: use apenas valores muito pequenos no início e aumente-os lentamente até obter o resultado desejado. A maioria dos usuários iniciantes tende a usar um valor grande demais e se decepciona com o resultado. Por exemplo, esta é uma implosão de imagem típica... |

  magick koala.gif -implode .6 implode.gif

[IM Output]
Usar valores cada vez maiores, em essência, sugará todos os pixels do círculo para o esquecimento. |

  magick koala.gif -implode 5 implode_big.gif

[IM Output]
No entanto, saiba que usar qualquer valor de "-implode" maior que '1.0' também é afetado pela Configuração de Pixel Virtual, pois o algoritmo começa a fazer referências de cor além dos limites da própria imagem. Como o padrão da configuração "-virtual-pixel" é 'edge', a cor da borda ou a moldura ao redor de uma imagem pode ter um efeito importante no resultado. Por exemplo, estas duas imagens são iguais, exceto que uma teve uma borda branca adicionada a ela. Isto basicamente mostra a área que está usando cores buscadas além dos limites da imagem propriamente dita. A área normalmente definida pela configuração "-virtual-pixel". |

  magick rose: -gravity center -crop 46x46+0+0 +repage \
                                              -implode 3   implode_rose.gif
  magick rose: -gravity center -crop 44x44+0+0 +repage \
                -bordercolor white -border 1  -implode 3   implode_rose_2.gif

[IM Output] [IM Output]
Usar diferentes configurações de Pixel Virtual, como '[Background](misc.html#background)', produzirá o mesmo efeito que adicionar "-border", mas sem ampliar a imagem. Outras configurações de Pixel Virtual podem produzir efeitos muito mais interessantes na região central implodida. Por exemplo, usar uma configuração '[Tile](misc.html#tile)' pode adicionar cópias altamente distorcidas da imagem. Por exemplo, aqui implodo uma imagem simples de caixa usando essa configuração... |

  magick -size 94x94 xc:red -bordercolor white -border 3 \
          -virtual-pixel tile     -implode 4   implode_tiled_box.gif

[IM Output]
Mais efeitos de "-virtual-pixel" são explorados em Efeitos de Implosão de Pixels Virtuais. À medida que o número de pixels sendo implodidos em uma área pequena aumenta, e o tamanho do parâmetro de implosão fica muito grande, os resultados começam a ter uma aparência 'pixelizada'. Para obter um resultado melhor e mais consistente, você pode aumentar o número de pixels com que a implosão trabalha, usando uma técnica chamada Superamostragem. Basicamente, usando uma imagem maior (ampliando a imagem de origem, se necessário), fazendo a distorção e, em seguida, encolhendo o resultado ao seu tamanho final, você produzirá um resultado muito melhor. |

  magick -size 94x94 xc:red -bordercolor white -border 3 \
          -virtual-pixel tile  -resize 400%  -implode 4 -resize 25% \
          implode_tiled_ss.gif

[IM Output]
Como você pode ver, obtém-se um resultado muito mais suave e realista, que mostra muito melhor os detalhes internos da distorção. No entanto, mesmo a superamostragem se degrada em imagens extremas como esta, pois envolve infinitos. Se você observar com atenção, verá que uma aparência 'pontilhada' retorna, mas apenas mais próximo do centro. Usando uma "-border" maior ao redor da imagem sendo implodida e removendo-a depois, você também pode deformar as bordas de uma imagem para dentro, em direção ao centro. |

  magick koala.gif -bordercolor blue -border 20x20 \
          -implode .5   -shave 18x18  implode_border.jpg

[IM Output]
A partir da versão 6.2.1 do IM, você também pode usar uma borda transparente, ou uma imagem com transparência... |

  magick koala.gif -bordercolor none -border 20x20 \
          -implode .5   -shave 18x18  implode_border_trans.png

[IM Output]

Explodir Imagens

Usando um valor negativo com o operador "-implode", você pode explodir a imagem. Isto, porém, é mais parecido com ampliar o centro da imagem, empurrando todos os pixels de raio médio em direção à borda, do que uma verdadeira explosão. |

  magick koala.gif -implode -2 explode.jpg

[IM Output]
Usar um valor maior, em essência, ampliará os pixels mais centrais da imagem em um círculo com dois terços do tamanho da menor dimensão da imagem. |

  magick koala.gif -implode -30 explode_big.jpg

[IM Output]
E aqui está uma versão 'Superamostrada'. |

  magick koala.gif -resize 400% -implode -30 \
          -resize 25% explode_big_ss.jpg

[IM Output]
A cor central da 'explosão' interna é definida pela cor do centro da imagem (ou região). Isso significa que, alterando as cores ao redor desse ponto antes de explodir, você pode controlar um efeito de 'flash' da explosão. Veja Animações abaixo para um exemplo animado desse controle de cor. Para outro exemplo de imagens implodidas, veja as contribuições do usuário hh no Flickr.

Redemoinhos em Imagens

O operador "-swirl" age como uma batedeira de bolo. Ele deforma a imagem em círculo pelo número de graus que você fornece como argumento. |

  magick koala.gif -swirl 180 swirl.jpg

[IM Output]
Adicionando uma borda e combinando com "-implode", você pode dar a aparência de um redemoinho sugando a imagem para o esquecimento. |

  magick koala.gif -bordercolor white -border 20x20 \
          -swirl 180 -implode .3  -shave 20x20   whirlpool.jpg

[IM Output]
A natureza principal dessa distorção é que a imagem ficará rotacionada no centro pelo ângulo que você especificar, enquanto a borda circular (como no Operador Implode acima) permanece inalterada. No momento, não há parâmetro para especificar um 'raio interno' que limite o redemoinho a um anel, em vez de a um disco completo. Animei esses efeitos de redemoinho, que você pode ver abaixo em Animações.


Animações (exemplos divertidos)

Para encerrar, vamos gerar algumas animações GIF de algumas dessas distorções. Para estas, gerei alguns scripts de shell simples para produzir a imagem animada, que você também pode baixar e usar para brincar com suas próprias imagens de teste. Isto me leva a um ponto importante. Se estiver gerando uma série de imagens usando essas distorções, é melhor sempre distorcer a partir da imagem inicial original, em vez de distorcer a imagem incrementalmente, repetidas vezes. Isto é especialmente verdadeiro para imagens rotacionadas, onde há algum desfoque no resultado, embora mínimo em qualquer operação individual. Se você fizer isso repetidas vezes, porém, este é o resultado. Todos os scripts usam uma técnica de 'Comando "magick" Gerado' para criar a animação. Ou seja, um script de shell cria um único comando longo, que é então executado. Isto evita a necessidade de gerar arquivos temporários, embora possa dificultar a depuração. Outra alternativa é usar um método conhecido como Streaming de Imagem MIFF, que gera imagens individuais em um laço e as 'canaliza' para um comando final de 'mesclagem'. Isto é demonstrado de forma mais clara nos exemplos Posicionamento Programado de Imagens em Camadas e Alfinetes em um Mapa. [IM Output] No script de shell "animate_mixer", cada quadro é gerado usando "-swirl" na imagem original. O redemoinho é animado em uma direção e depois de volta, formando um ciclo contínuo. Este é, na verdade, um exemplo muito típico de animação de deformação no IM. Uma variação disso é fazer com que a animação desfaça a deformação, transformando-se em uma imagem diferente, mas semelhante.
[IM Output] O script de shell "[animate_whirlpool](../static/img/warping/animate_whirlpool)" não apenas usa "[-swirl](https://imagemagick.org/command-line-options/#swirl)" em cada quadro da imagem, mas também usa "-implode" com um argumento de tamanho crescente. Usei uma cor de borda 'lightblue' para o espaço adicionado, a fim de mostrar que a imagem inteira será 'sugada pelo ralo', embora eu devesse ter usado a mesma cor de fundo branca para um efeito melhor e mais realista.
--- ---
[IM Output] Uma explosão no meio da imagem (veja o script "animate_explode"). A imagem é novamente ampliada para que a imagem inteira seja explodida, e um ponto colorido é desenhado no centro para definir a cor final.
--- ---
[IM Output] Usando o script de shell "animate_flex", o centro da imagem é flexionado para cima e para baixo, alterando a amplitude da função "-wave" tanto positiva quanto negativamente.
--- ---
[IM Output] Usando o script de shell "animate_flag", crio uma animação de 'onda deslocada' para fazer a imagem tremular como uma bandeira. A animação pode ser aprimorada deslocando também verticalmente cada quadro da imagem, de modo que a borda esquerda permaneça constante, e talvez adicionando um mastro. Isso, porém, exige que você determine matematicamente esse deslocamento, o que pode ser complicado.
--- ---
[IM Output] O script "animate_rotate" gerou esta animação de rotação, mas recorta cada quadro com a imagem original, como descrito acima, para preservar o tamanho da imagem original.
--- ---
[IM Output] Como comparação, aqui está uma rotação de coala gerada usando as configurações padrão e o comando "-distort SRT {angle}". O script usado para gerá-la é "animate_distort_rot". Observe como a imagem fica muito mais nítida com este método de rotação, e a ausência do 'tremor' rotacional que é evidente na versão anterior.
--- ---

Animações e Vídeos Bônus

[IM Output] Como bônus, Florent Monnier, da França, criou um vídeo legal usando o operador de distorção "[-swirl](https://imagemagick.org/command-line-options/#swirl)", feito com um script da API OCaml do IM. Selecione a animação GIF à direita para baixar a versão completa do vídeo. Você consegue fazer um bom vídeo demonstrando uma técnica de mapa de distorção? Conhece algum em outro lugar da internet? Escreva-me.