Exemplos do ImageMagick -- Cortar e Adicionar Bordas
- O operador básico de recorte
- A Imagem Perdida (resultante de um recorte ruim)
- Recortar uma Imagem com Tela Virtual Existente
- Removendo a Tela Virtual dos Resultados usando +repage *
- Recorte por Viewport com Ajustes da Tela Virtual
- Recortar em Relação à Gravidade
- Recortar uma Porcentagem de uma Imagem
- Recorte em Mosaico, subdividindo uma imagem em várias imagens
- Recorte em Mosaico Centralizado, deixando restos ao redor das bordas
- Recorte em Faixas, recortando linhas e colunas
- Quadrantes, cortando ao redor de um único ponto
- Usando Deslocamentos Negativos, remover a borda inferior ou esquerda
- Recortando em Divisões de Tamanho Aproximadamente Igual
- Moldura, adicionando bordas tipo 3D às imagens
- Aparar (Shave), removendo as bordas das imagens
- Aparando com uma Cor Específica
- Aparando Apenas Um Lado de uma Imagem
- Aparando Imagens 'Difusas' -- Imagens JPEG de Baixa Qualidade
- Aparando Imagens 'Ruidosas' -- Imagens Digitalizadas ou de Vídeo
Aqui exploramos as operações do ImageMagick que permitem colocar suas imagens sob a faca, e adicionar molduras e bordas ao redor da imagem. Ou seja, examinamos operações que alteram o tamanho de uma imagem, sem escalar o conteúdo da imagem. Você pode pensar que isso é uma operação simples, e de fato é. Tão simples que o IM oferece uma enorme quantidade de maneiras e métodos de realmente realizar essa tarefa. Tantas que precisei dar a ela sua própria página de exemplos apenas para demonstrá-las todas.
Recortar (cortar imagens para o tamanho desejado)
Recorte e Tela de Página
O operador de imagem "[-crop](https://imagemagick.org/command-line-options/#crop)" simplesmente vai cortar a parte de todas as imagens na sequência atual no tamanho e posição que você especificar pelo argumento de geometria.
magick rose: rose.gif
magick rose: -crop 40x30+10+10 crop.gif
magick rose: -crop 40x30+40+30 crop_br.gif
magick rose: -crop 40x30-10-10 crop_tl.gif
magick rose: -crop 90x60-10-10 crop_all.gif
magick rose: -crop 40x30+90+60 crop_miss.gif
Só para você poder verificar exatamente o que aconteceu, aqui está a saída de "magick identify" sobre os resultados do recorte acima.
magick identify rose: crop.gif crop_br.gif crop_tl.gif \
crop_all.gif crop_miss.gif
Observe que o tamanho da imagem exibida (sua Tela Virtual) não foi afetado pela operação "[-crop](https://imagemagick.org/command-line-options/#crop)". A imagem em si foi recortada, e pode estar menor, mas a tela na qual a imagem GIF é exibida ainda tem o mesmo tamanho da tela original. Você também notará que o tamanho da imagem realmente produzida pode não ser o tamanho exato que você solicitou no recorte. Pode ser muito menor do que você esperava, pois o recorte em si estava parcial ou totalmente fora da área de imagem real sendo recortada. Você também notará que o 'deslocamento' da imagem na Tela Virtual foi em muitos casos também alterado para que os pixels da imagem recortada permaneçam exatamente na mesma posição em que estavam na imagem original. Ou seja, o conteúdo da imagem em si não se move, mesmo que a imagem em si esteja menor. Isso significa que se você agora modificar a imagem menor e então sobrepô-la (usando operadores de camadas de imagem de volta sobre a original, ela se encaixará exatamente de onde a subimagem originalmente veio. Ou seja, o IM retém as informações de 'tela virtual', 'página' ou 'camada' da imagem para preservá-las para uso posterior. Isso é especialmente importante para o funcionamento correto do tratamento de animações GIF. Para mais informações sobre isso veja. Desconstruir Animações GIF. | _As imagens GIF fazem uso ativo das informações de 'página' ou 'tela virtual', tamanho e deslocamento em imagens recortadas pelo IM. Se você não quiser essas informações, remova-as com "[+repage](https://imagemagick.org/command-line-options/#repage)" imediatamente após o "[-crop](https://imagemagick.org/command-line-options/#crop)".
Observe que muitos formatos de imagem não salvam essas informações de página/tela virtual, então salvar nesses formatos automaticamente as remove. O JPEG é um exemplo típico de formato que remove essa informação.
O formato PNG não faz muito uso das informações de página/tela (exceto no formato multi-png (MNG)), mas ele salva a informação de deslocamento da página (mesmo deslocamentos negativos). O IM também adicionará uma pequena quantidade de metadados para preservar o tamanho da tela virtual para uso posterior por outros comandos do IM.
Por causa dessa preservação, eu recomendo fortemente que você ainda aplique um "[+repage](https://imagemagick.org/command-line-options/#repage)" mesmo ao salvar em JPEG ou outro formato de imagem sem página quando você não precisar dessa informação, como precaução, e para deixar óbvio que você não a quer.
_
---|---
Observe que o comportamento do recorte pode ser afetado por estas definições:
| trim:percent-background=X% | Define a quantidade de fundo que é tolerada em uma borda. É especificada como uma porcentagem. 0% significa que nenhum fundo é tolerado. 50% significa que uma borda pode conter até 50% de pixels que são fundo de acordo com o fator de difusão (fuzz). |
|---|---|
| trim:edges={north,east,south,west} | Apara apenas as bordas especificadas da imagem. |
| trim:minSize=geometry | Limita o trim ao tamanho especificado. |
| type:features=string | Adiciona uma característica de fonte a ser usada pelo delegado RAQM durante a composição complexa de texto. Isso é normalmente usado para ativar características opcionais de fonte que não estão habilitadas por padrão, mas também pode ser usado para desativar características de fonte padrão. As características incluem aquelas para controlar kerning, ligadura e árabe. |
| type:hinting=false | Desabilita o hinting de fontes. A renderização adequada dos glifos precisa que os pontos escalados estejam alinhados ao longo da grade de pixels do dispositivo de destino, através de uma operação frequentemente chamada de hinting. Um de seus principais propósitos é garantir que larguras e alturas importantes sejam respeitadas em toda a fonte. (Por exemplo, é muito frequentemente desejável que os glifos ‘I’ e ‘T’ tenham sua linha vertical central com a mesma largura de pixel. O hinting também gerencia características como hastes e overshoots, que podem causar problemas em tamanhos de pixel pequenos. |
A Imagem Perdida (resultante de um recorte ruim)
A última imagem no exemplo acima (EG: "crop_miss.gif") também produziu uma imagem vazia especial. Tais imagens podem ser produzidas por operações como Recorte, Trim, Comparação de Camadas, e até mesmo Otimizações de Animação GIF, que geram resultados vazios ou sem sentido. Por exemplo, no exemplo anterior acima, a operação "[-crop](https://imagemagick.org/command-line-options/#crop)" errou a imagem real que estava recortando, então ela produziu essa imagem 'perdida' especial, bem como algumas mensagens de aviso informativas...
A imagem de saída, ou imagem 'perdida', é uma imagem mínima, de um pixel de tamanho com deslocamento 0, mas com o tamanho da página ou tela da imagem original, bem como quaisquer outros metadados que a imagem possa ter associados. Aqui ela representa a imagem 'vazia' ou de 'tamanho zero' que deveria ter sido retornada por "[-crop](https://imagemagick.org/command-line-options/#crop)", mas como nenhum formato de imagem pode produzir uma imagem de dimensões 'zero', uma imagem de um único pixel transparente é usada em seu lugar. Só para você ver mais claramente, aqui está a saída do "[identify](basics.html#identify)" da imagem perdida, bem como uma 'enumeração de pixels do IM' dessa imagem de um único pixel, mostrando que ela contém apenas um único pixel transparente.
magick identify crop_miss.gif
magick crop_miss.gif crop_miss_data.txt
Essa imagem 'perdida' é basicamente a mesma coisa que criar uma imagem "[null:](files.html#null)" mas com o tamanho de página ou tela virtual da imagem de origem original definido (mas não o seu deslocamento), e todos os outros metadados da imagem, como os atrasos de temporização da animação GIF. O método de descarte (disposal) do GIF, no entanto, pode ser modificado para garantir que as animações permaneçam corretas após o recorte. Basicamente, você precisa ter em mente que "[-crop](https://imagemagick.org/command-line-options/#crop)" e outros operadores similarmente relacionados podem produzir uma imagem 'perdida' especial. Como tal, você deve planejar procurar pela mensagem de aviso, ou por essa 'Imagem Perdida' especial ao escrever um script usando o IM, se tal imagem mínima for possível e puder causar problemas. Se você não quiser a mensagem de aviso (por exemplo, você espera e trata a imagem 'perdida' ocasional), você pode adicionar uma Configuração de Controle Operacional "[-quiet](https://imagemagick.org/command-line-options/#quiet)" à linha de comando. Isso diz ao IM para não produzir mensagens de aviso informativas, apenas erros reais. No momento não há método para remover quaisquer imagens 'perdidas', ou "[null:](files.html#null)", da sequência de imagens atual. No entanto, tal método foi proposto para uma versão futura do IM. Mande-me um e-mail se você descobrir que precisa de tal método.
Recortar uma imagem com Tela Virtual existente
Se uma imagem já tem uma Tela Virtual existente (por exemplo, um quadro de uma animação GIF), então a operação "[-crop](https://imagemagick.org/command-line-options/#crop)" será aplicada relativamente à tela virtual, e NÃO à imagem real. Ou seja, ela tentará preservar o deslocamento dos dados de pixel reais da imagem recortada na tela. Ou seja, um pixel específico antes do recorte ainda deve estar localizado no mesmo deslocamento relativo à tela virtual depois. Dessa forma, o recorte de imagens em camadas, ou de animações GIF, continuará a funcionar corretamente, mesmo que a 'tela' em si não tenha sido recortada. Aqui criamos uma imagem centralizada numa tela de página, e a recortamos de várias maneiras. Como antes, o tamanho da tela em si não é modificado pela operação.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop 32x32+16+16 crop_page.gif
magick paged.gif -crop 32x32+0+0 crop_page_tl.gif
magick paged.gif -crop 32x32+32+32 crop_page_br.gif
magick paged.gif -crop 60x60+2+2 crop_page_all.gif
magick paged.gif -quiet -crop 32x32+56+56 crop_page_miss.gif
magick identify paged.gif crop_page.gif crop_page_tl.gif crop_page_br.gif \
crop_page_all.gif crop_page_miss.gif
Esse último exemplo acima foi, é claro, a Imagem Perdida especial. Observe que eu suprimi a mensagem de aviso normal do IM usando uma configuração "[-quiet](https://imagemagick.org/command-line-options/#quiet)". Só para você ver o que está acontecendo, vamos dar uma olhada mais de perto no recorte com página do canto inferior direito da imagem. Aqui eu desenhei um quadrado semitransparente sobre a área que foi recortada.
magick paged.gif -page 64x64+32+32 -size 32x32 xc:'#fff8' \
-alpha set -background none -mosaic crop_area_br.png
A partir disso você pode ver o que está acontecendo. Mesmo que o recorte esteja contido completamente na tela de página, o recorte não cobriu a imagem real completamente. O resultado é que a imagem real está menor do que o usuário pode ter pretendido, mas ainda posicionada numa tela ou página maior.
Removendo a Tela Virtual dos Resultados
Se essa informação da Tela Virtual não for desejada, então você pode usar o operador especial "[+repage](https://imagemagick.org/command-line-options/#repage)" para redefinir a tela de página e a posição para corresponder à imagem realmente recortada.
magick rose: -crop 40x30+10+10 +repage repage.gif
magick rose: -crop 40x30+40+30 +repage repage_br.gif
magick rose: -crop 40x30-10-10 +repage repage_tl.gif
magick rose: -crop 90x60-10-10 +repage repage_all.gif
magick rose: -quiet -crop 40x30+90+60 +repage repage_miss.gif
Esse é, claro, o resultado que novos usuários do IM normalmente teriam esperado do operador "[-crop](https://imagemagick.org/command-line-options/#crop)". É na verdade algo tão comum de fazer que você poderia chamar de regra geral.
Sempre use "[+repage](https://imagemagick.org/command-line-options/#repage)" após qualquer operação do tipo 'recorte'.
A menos que você realmente precise preservar essa informação.
A última imagem acima é, claro, a imagem perdida de recorte especial, mas eu suprimi a mensagem de aviso usando a configuração operacional "[-quiet](https://imagemagick.org/command-line-options/#quiet)". |
Para a versão 5 do IM e anteriores, a operação "[+repage](https://imagemagick.org/command-line-options/#repage)" era tratada por uma sequência de argumentos "-page +0+0", geralmente logo antes de salvar em um formato que usa informações de tela virtual e deslocamento, como o GIF. Mas isso só era utilizável ao ler ou gravar a imagem em um arquivo, impedindo seu uso entre várias operações de processamento de imagem.__Com a versão 6 do IM, areestruturação da linha de comando, a opção "[-page](https://imagemagick.org/command-line-options/#page)" tornou-se puramente uma configuração de leitura/criação de imagem para uso na criação de animações GIF e Camadas de Imagens. Como tal, operadores "[-repage](https://imagemagick.org/command-line-options/#repage)" e "[-set](https://imagemagick.org/command-line-options/#set) page" separados foram adicionados para permitir que os usuários definam ou alterem as informações da tela virtual. |
|---|---|
Recorte por Viewport com Ajustes da Tela Virtual
A partir da versão 6.2.4-5 do ImageMagick, você pode adicionar uma nova flag especial ao argumento "[-crop](https://imagemagick.org/command-line-options/#crop)". Essa flag '!' dirá ao crop para ajustar as informações da Tela Virtual da imagem retornada de modo que ela seja relativa à área recortada. Em outras palavras, independentemente do tamanho resultante da imagem realmente recortada, a tela e o deslocamento da imagem retornada serão ajustados para corresponder à área que você solicitou recortar. Você pode pensar nessa flag como recortar uma imagem para corresponder a uma 'janela' ou 'viewport' da área de recorte. Mesmo que metade da imagem não esteja visível nessa 'janela', a tela virtual e o deslocamento da parte retornada corresponderão a essa 'viewport'. Por exemplo...
magick rose: -crop 40x30+10+10\! crop_vp.gif
magick rose: -crop 40x30+40+30\! crop_vp_br.gif
magick rose: -crop 40x30-10-10\! crop_vp_tl.gif
magick rose: -crop 90x60-10-10\! crop_vp_all.gif
magick rose: -quiet -crop 40x30+90+60\! crop_vp_miss.gif
magick identify rose.gif crop_vp.gif crop_vp_br.gif crop_vp_tl.gif \
crop_vp_all.gif crop_vp_miss.gif
| O caractere '!' tem significado especial para alguns shells UNIX, como o "csh", e deve ser escapado com uma barra invertida, mesmo quando colocado dentro de aspas.
---|---
Observe como o tamanho da tela da imagem retornada agora corresponde à área em que a imagem foi recortada. Para recortes de imagens que estão completamente dentro da imagem real, o resultado será equivalente a seguir o recorte com um "[+repage](https://imagemagick.org/command-line-options/#repage)". No entanto, qualquer recorte parcial ou perdido da imagem resultará em uma tela maior e um possível deslocamento na imagem resultante. Como tal, isso não substitui fazer um "[+repage](https://imagemagick.org/command-line-options/#repage)" após o recorte para redefinir as informações de página/tela. No entanto, você pode seguir um 'recorte por viewport' com um Flatten para 'preencher' a nova tela virtual da imagem com pixels reais. Ou seja, você ficará com uma imagem que é garantidamente do tamanho do recorte solicitado, com quaisquer áreas 'perdidas' preenchidas com a cor "[-background](https://imagemagick.org/command-line-options/#background)" atual da 'viewport'. Por exemplo, ao Preencher uma Imagem. |
magick rose: -crop 100x100-15-25\! -background skyblue -flatten \
crop_viewport.gif
![[IM Output]](../static/img/crop/crop_viewport.gif)
Achatar (flatten) uma imagem após um recorte por viewport é na verdade equivalente a usar o Operador Extent (veja abaixo), para fornecer um 'recorte preenchido'. Uma flag de 'recorte por viewport' também é muito importante ao recortar animações GIF, pois ela não apenas ajusta o tamanho da tela, mas também garante que todos os quadros da imagem permaneçam corretamente posicionados dentro da área recortada. Sem essa opção, recortar uma animação GIF é muito difícil, exigindo correção externa do tamanho e dos deslocamentos da tela da imagem. Para um exemplo disso, veja Recorte de Animação, com a tela também. De muitas maneiras, um 'recorte por viewport' está intimamente relacionado à Configuração Especial de Viewport do Distort, no sentido de que ambos agem como se fossem uma 'janela' para a imagem resultante. Ambos podem ser usados como um método de 'recorte'. | A flag '!' NÃO pode ser usada ao gerar recortes em mosaico de múltiplas imagens, ou com recorte em mosaico de área igual, onde tem um significado diferente. Veja as seções apropriadas abaixo.
---|---
Recortar em relação à Gravidade
A posição de deslocamento do "[-crop](https://imagemagick.org/command-line-options/#crop)" por padrão é relativa ao canto superior esquerdo da imagem. No entanto, ao definir a configuração "[-gravity](https://imagemagick.org/command-line-options/#gravity)", você pode dizer ao "[-crop](https://imagemagick.org/command-line-options/#crop)" para cortar a imagem em relação ao centro, ao canto, ou a uma borda da imagem. O uso mais comum de um recorte com gravidade é recortar o 'center' de uma imagem. |
magick rose: -gravity Center -crop 32x32+0+0 +repage crop_center.gif
![[IM Output]](../static/img/crop/crop_center.gif)
A configuração "[-gravity](https://imagemagick.org/command-line-options/#gravity)" não afeta apenas a posição 'zero' inicial do recorte, mas também afeta a direção do deslocamento do recorte. Por exemplo, se você usar uma "[-gravity](https://imagemagick.org/command-line-options/#gravity)" de 'South', um deslocamento de '+0+5' deslocará a área de recorte para cima, em vez de para baixo como normalmente faria. |
magick rose: -gravity South -crop 20x20+0+5 crop_south.gif
![[IM Output]](../static/img/crop/crop_south.gif)
Observe a posição do exemplo de recorte acima. Eu propositalmente deixei de fora a operação "[+repage](https://imagemagick.org/command-line-options/#repage)" para que você possa ver como a área de recorte foi deslocada da borda inferior da imagem. Observe também que a área de recorte não é apenas relativa à borda inferior (sul), mas que a área está 'justificada' ao centro, ficando no meio da borda inferior. Isso é feito com todas as operações afetadas pela gravidade.
Recortar uma Porcentagem de uma Imagem
O operador "[-crop](https://imagemagick.org/command-line-options/#crop)" também entende como recortar uma imagem para apenas uma porcentagem de seu tamanho original. Por exemplo, isto vai reduzir o tamanho da imagem pela metade. |
magick rose: -crop 50%x+0+0 crop_half.gif
![[IM Output]](../static/img/crop/crop_half.gif)
| Se apenas um número de tamanho for fornecido, então esse valor é usado para as porcentagens de largura e altura, e o tamanho final da área que está sendo recortada será arredondado para o inteiro mais próximo. O deslocamento não é opcional.
---|---
Observe que, embora o tamanho possa ser uma porcentagem, o deslocamento será sempre em pixels. Você não pode fornecer um deslocamento como uma porcentagem do tamanho da imagem. |
magick rose: -crop 50%x+30+20 crop_percent.gif
![[IM Output]](../static/img/crop/crop_percent.gif)
| _Quando um recorte é fornecido com um deslocamento, vocêdeve fornecer um símbolo 'x' no argumento para que o argumento possa ser interpretado corretamente. Isso é especialmente importante quando apenas um único número é fornecido para tanto a largura quanto a altura da área de recorte.
Como tal, você não pode usar um argumento como '50%+30+20 que é um erro, e resultará no crop silenciosamente não fazendo nada._
---|---
Mais comumente, um recorte por porcentagem é feito a partir do centro de uma imagem. |
magick rose: -gravity Center -crop 50x80%+0+0 crop_percent_center.gif
![[IM Output]](../static/img/crop/crop_percent_center.gif)
| O símbolo de porcentagem '%' pode aparecer em qualquer lugar de um argumento, e se fornecido se referirá tanto aos números de largura quanto de altura. É uma flag que apenas declara que as partes do 'tamanho da imagem' são uma fração percentual da tela virtual ou do tamanho de página da imagem. Os deslocamentos são sempre fornecidos em pixels.
---|---
Você também pode usar uma flag de 'recorte por viewport' com recortes por porcentagem, para definir automaticamente o tamanho da tela e o deslocamento do recorte, para a área que está sendo recortada. |
magick rose: -gravity Center -crop 50%\! crop_percent_vp.gif
![[IM Output]](../static/img/crop/crop_percent_vp.gif)
| _Você não pode usar tamanhos percentuais para recorte em mosaico (veja a seguir). Como tal, se o deslocamento não for fornecido, e um tamanho percentual for dado (como acima), um deslocamento de +0+0 é assumido.
_
---|---
A flag '!' significa que um "[+repage](https://imagemagick.org/command-line-options/#repage)" não é necessário. No entanto, cautela ainda é recomendada, para imagens de entrada que também possam ter tamanho de tela virtual e deslocamentos.
Recorte em Mosaico, subdividindo uma imagem em várias imagens
Um dos aspectos mais úteis do crop é quando você não fornece uma posição específica ao comando de recorte. Ou seja, você fornece um tamanho, e não uma posição dentro da imagem para recortar. Nesse caso, em vez de gerar apenas uma imagem, o crop gera uma série inteira de imagens..
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif +gravity -crop 32x32 tiles_%d.gif
magick identify paged.gif tiles_?.gif
| Se você quer apenas extrair um número específico de blocos de uma imagem, dê uma olhada em Recortando em Divisões de Tamanho Aproximadamente Igual abaixo. | É uma boa ideia garantir que a gravidade esteja desligada usando "[+gravity](https://imagemagick.org/command-line-options/#gravity)". Isso porque, em um caso especial (recorte percentual centralizado), a configuração de gravidade pode desativar o recorte em mosaico. Outros efeitos da gravidade no recorte em mosaico também são indefinidos. |
|---|---|
Ao usar os operadores de camadas de imagem "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)" ou "[-flatten](https://imagemagick.org/command-line-options/#flatten)", (veja Layer Flatten) você pode sobrepor todas essas imagens umas sobre as outras, restaurando a imagem original. |
magick tiles_[0-3].gif -background white -mosaic tiles_mosaic.gif
![[IM Output]](../static/img/crop/tiles_mosaic.gif)
No entanto, como você pode ver, a tela virtual da imagem foi preenchida com a cor de fundo pelo "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)". Uma alternativa é usar "[-layers](https://imagemagick.org/command-line-options/#layers) merge" (veja Layer Merge), que mescla as múltiplas imagens em camadas em uma nova imagem em camada apenas grande o suficiente para conter todas as imagens fornecidas. Ou seja, a tela virtual não é preenchida, como fariam os métodos de camadas "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)" ou "[-flatten](https://imagemagick.org/command-line-options/#flatten)". |
magick tiles_[0-3].gif -background none -layers merge tiles_layered.gif
magick identify tiles_layered.gif
[![\[IM Text\]](../static/img/crop/tiles_layered_ident.txt.gif)](../static/img/crop/tiles_layered_ident.txt)
Se você tivesse redefinido as informações de tela e deslocamento usando "[+repage](https://imagemagick.org/command-line-options/#repage)", então as imagens não conteriam mais o deslocamento de onde foram recortadas, nem o tamanho original da imagem de origem. Nesse caso você pode reunir todas as imagens novamente usando o modo especial 'concatenation' do "magick montage". Você precisará dizer ao montage quantas linhas ou colunas de imagens foram extraídas da imagem original.
magick rose: -crop 20x20 +repage +adjoin rose_tiles_%02d.gif
montage -mode concatenate -tile 4x rose_tiles_*.gif rose_rejoined.gif
Observe que os nomes das imagens individuais vão de "rose_tiles_00.gif" a "rose_tiles_11.gif", que é simplesmente o número de sequência dos blocos na memória. Isso não é muito agradável, pois os nomes de arquivo não dão indicação fácil da posição real à qual cada bloco pertence, ou do número total de blocos por linha e coluna. A partir do IM v6.4.8-4 você também pode usar Escapes de Porcentagem em Nomes de Arquivo especiais para gerar e incluir rótulos especiais no nome do arquivo de saída. Usando isso com Escapes de Porcentagem FX você pode calcular uma 'posição de bloco' diferente para cada imagem. Por exemplo...
magick rose: -crop 20x20 \
-set filename:tile "%[fx:page.x/20+1]_%[fx:page.y/20+1]" \
+repage +adjoin "rose_tile_%[filename:tile].gif"
Vai gerar os nomes de arquivo de imagem de bloco "rose_tile_1_1.gif" a "rose_tile_4_3.gif", que é um esquema de nomenclatura de arquivos muito melhor. Complicado, mas funciona. Infelizmente você não pode formatar o número gerado por um Escape de Porcentagem, para incluir preenchimento com zeros ou especificar um número exato de dígitos de ponto flutuante. Pelo menos não no momento.
Recorte em Mosaico Centralizado
Em uma Discussão no Fórum do IM foi feito um pedido para centralizar o recorte em mosaico de modo a distribuir as 'imagens de resto' uniformemente ao redor das bordas. Ao fazer isso, maximizamos o efeito dos blocos completos colocando-os no centro da imagem. Claro que você também acaba com mais blocos de borda incompletos. A solução foi centralizar a imagem de entrada em uma tela virtual, que fosse algum múltiplo do tamanho de bloco desejado. Por exemplo, para recortar em mosaico a imagem "rose:" (70x46 pixels de tamanho) no número máximo de blocos completos 30x20, no centro da imagem (e cercados por blocos de resto), você faria o seguinte.
-
Primeiro calcule o número de blocos completos que você pode obter da imagem dividindo os tamanhos da imagem...
70x46 / 30x20 => 2x2 blocos completos + resto -
Agora adicione mais 2 linhas e colunas para conter as imagens de resto (se necessário)
2x2 + 2x2 => 4x4 imagens de bloco -
Multiplique o tamanho do bloco por isso para obter o tamanho da tela virtual.
30x20 * 4x4 => 120x80 tamanho da tela -
Subtraia o tamanho da imagem original e divida em dois para o deslocamento de centralização.
( 120x80 - 70x46 ) / 2 => +25+17
Então a tela virtual e o deslocamento de centralização são 120x80+25+17. E aqui usamos os cálculos acima para realizar um Recorte em Mosaico Centralizado...
magick rose: -repage 120x80+25+17 -crop 30x20 +repage rose_30x20_%02d.gif
Se você quiser preservar a localização de deslocamento original dos blocos, mas remover o deslocamento de centralização, você pode fazer um ajuste de deslocamento relativo usando "-repage -25-17\!" (substituindo o "[+repage](https://imagemagick.org/command-line-options/#repage)" no exemplo acima). Se você não adicionou duas colunas e linhas ao número de blocos e, portanto, gerou um deslocamento negativo, você pode efetivamente ignorar os blocos de borda de resto, e produzir apenas os blocos completos que existem na imagem.
magick rose: -repage 60x40-5-3 -crop 30x20 +repage rose_ctiles_%d.gif
Basicamente, como os restos agora estão 'fora' da tela virtual calculada, o operador "[-crop](https://imagemagick.org/command-line-options/#crop)" não sabe que eles estavam lá e os ignora. Novamente, substituindo o "[+repage](https://imagemagick.org/command-line-options/#repage)" no exemplo acima por um ajuste de deslocamento relativo usando os valores de deslocamento negados "-repage +5+3\!" restaurará as localizações de deslocamento originais de onde os blocos foram recortados. Uma alternativa para um recorte em mosaico centralizado, ignorando os restos, é simplesmente substituir a configuração de tela virtual por um recorte apropriado.
magick rose: -gravity center -crop 60x40+0+0 +gravity +repage \
-crop 30x20 +repage rose_ctiles2_%d.gif
O exemplo acima é mais fácil de entender, mas também é um pouco mais lento, pois você agora está realizando dois recortes. No entanto, são necessários menos cálculos. Mas se você quiser recuperar os deslocamentos originais dos blocos, você ainda precisará calcular o deslocamento relativo necessário, caso em que você bem poderia realizar a tarefa pelo método anterior mais rápido usando a tela virtual da imagem.
Recorte em Faixas, recortando linhas e colunas
Com a versão 6.1.1 do IM, um "[-crop](https://imagemagick.org/command-line-options/#crop)" foi aprimorado de modo que, se um dos argumentos de tamanho estiver faltando, ou definido como zero, então o argumento de tamanho ausente é definido como o tamanho da tela/página da imagem. Na maioria dos casos isso é grande o suficiente para cobrir a imagem localizada na tela, se o deslocamento relacionado também estiver definido como zero. Essa pequena mudança permite que você facilmente recorte uma única linha ou coluna da imagem, sem precisar de um número enorme como '999999' para cobrir o tamanho da imagem. Por exemplo, aqui extraímos uma simples linha e coluna da nossa imagem rose 'com página'.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop 20x0+30+0 strip_column.gif
magick paged.gif -crop 0x20+0+30 strip_row.gif
magick identify paged.gif strip_column.gif strip_row.gif
[![\[IM Text\]](../static/img/crop/strip_ident.txt.gif)](../static/img/crop/strip_ident.txt)
Se você remover ambos os deslocamentos, bem como um argumento de tamanho, você pode dividir a imagem em uma série de faixas ou colunas, em vez de blocos.
magick rose: -crop 40x30+10+10 crop.gif
magick crop.gif -quiet -crop 20x strips_%d.gif
magick identify crop.gif strips_?.gif
[![\[IM Text\]](../static/img/crop/strips_ident.txt.gif)](../static/img/crop/strips_ident.txt)
Observe que o recorte em mosaico, em faixas ou de outra forma, é feito por toda a tela de página da imagem, e como tal está alinhado a essa tela, e NÃO apenas à imagem real. É por isso que a primeira e a última imagem real geradas no exemplo acima têm apenas 10 pixels de largura. Claro que se um bloco específico, ou neste caso 'coluna', errar a imagem real na tela virtual (como a última imagem no exemplo acima), então uma imagem perdida de recorte é gerada. O aviso que o IM normalmente teria produzido foi suprimido usando uma configuração "[-quiet](https://imagemagick.org/command-line-options/#quiet)". Isso não é recomendado a menos que você esteja esperando tal evento, e esteja preparado para ele, como em um script. | _É possível que uma imagem seja posicionada de tal forma que ela nem mesmo apareça em sua própria página ou tela virtual, ou seja tão grande que a tela de página só possa conter uma pequena janela ou parte da imagem.
Nesses casos raros, o recorte em faixas sem nenhum argumento de tamanho fará a subdivisão da imagem incorretamente, e produzirá respectivamente imagens perdidas, ou blocos menores apenas das partes dentro dos limites da tela virtual.
O operador "[-crop](https://imagemagick.org/command-line-options/#crop)", no entanto, não será corrigido para tratar esses casos especiais raros, pois fazer isso impediria seu uso em outros casos, como os exemplificados abaixo.
Se isso for um problema para você, sanitize os deslocamentos de página da imagem antes de recortar usando "[+repage](https://imagemagick.org/command-line-options/#repage)" para remover a tela virtual antes de tentar gerar as imagens de bloco._
---|---
Como uma maneira alternativa de dividir imagens em linhas separadas, dê uma olhada no script especial "[divide_vert](../static/img/scripts/divide_vert)". Esse programa permite que você divida uma imagem de acordo com 'lacunas' horizontais de uma única cor sólida. Por exemplo, se for fornecida uma imagem de texto simples, ele a dividirá em imagens alternadas de 'linhas' e 'lacunas'. Uma opção simples permite que você remova essas lacunas.
Quadrantes, cortando ao redor de um único ponto
Como qualquer um dos números de tamanho do crop estiver faltando, eles são substituídos pelo tamanho da tela da imagem que você está recortando. Isso deveria, na maioria dos casos, resultar em toda a imagem naquela dimensão tornando-se parte do resultado do recorte. Isso permite, com uso cuidadoso dos argumentos, a capacidade de recortar uma imagem em quartos ao redor de um ponto específico (com aquele pixel específico colocado como o pixel superior direito da imagem do quadrante inferior esquerdo). Você não precisa saber qual o tamanho da imagem para fazer isso. Por exemplo, aqui eu recorto a imagem em quadrantes ao redor do ponto 30,40
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop 30x40+0+0 quadrant_tl.gif
magick paged.gif -crop 0x40+30+0 quadrant_tr.gif
magick paged.gif -crop 30x0+0+40 quadrant_bl.gif
magick paged.gif -crop +30+40 quadrant_br.gif
Claro que se o ponto ao redor do qual você estava recortando errar a imagem real, então duas ou até três das imagens de quadrante resultantes serão as imagens de erro de recorte perdido especiais.
Usando Deslocamentos Negativos, remover a borda inferior ou esquerda
Não há razão para que você não possa usar um deslocamento negativo com "[-crop](https://imagemagick.org/command-line-options/#crop)". De fato, às vezes pode ter benefícios bem definidos. Por exemplo, vamos pegar nossa imagem rose com página e recortá-la progressivamente com deslocamentos negativos maiores. Não forneceremos um tamanho de imagem ao argumento "[-crop](https://imagemagick.org/command-line-options/#crop)", então ele assumirá por padrão o tamanho da tela da imagem.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -crop -10-10 neg_offset_1.gif
magick paged.gif -crop -20-20 neg_offset_2.gif
magick paged.gif -crop -30-30 neg_offset_3.gif
magick paged.gif -crop -40-40 neg_offset_4.gif
magick paged.gif -crop -50-50 neg_offset_5.gif
Como você pode ver, diminuir constantemente o deslocamento para um valor negativo maior resulta lentamente em as bordas inferior e direita sendo 'cortadas', com o último exemplo quase errando a imagem real. Se levássemos isso um passo adiante, uma Imagem Perdida seria gerada. É um pouco como usar um operador "[-chop](https://imagemagick.org/command-line-options/#chop)" mas sem uma configuração "[-gravity](https://imagemagick.org/command-line-options/#gravity)". Veja Chop, Removendo Bordas. Claro que, ao usar "[-crop](https://imagemagick.org/command-line-options/#crop)" você pode precisar usar um operador "[+repage](https://imagemagick.org/command-line-options/#repage)" para ajustar as informações de tela/página, enquanto um "[-chop](https://imagemagick.org/command-line-options/#chop)" realiza tal ajuste automaticamente. É a vida.
Recortando em Divisões de Tamanho Aproximadamente Igual
O maior problema com o Recorte em Mosaico é que você só pode definir o tamanho final de cada bloco. Isso funciona muito bem quando o tamanho da imagem é um múltiplo exato do tamanho de bloco desejado, mas como você viu, se esse não for o caso, você pode acabar com blocos 'curtos' nas bordas direita e inferior. Por exemplo, vamos novamente dividir a imagem rose embutida, mas tentar dividi-la em blocos 3x3. A imagem original tem 70x46 pixels, então dividido por 3 cada bloco fica com 23x15 pixels...
magick rose: -crop 23x15 +repage +adjoin rose_23x15_%02d.gif
Bem, como você pode ver, isso não funcionou, porque a imagem rose não pode ser dividida exatamente em 3 blocos de tamanho igual. Nesse caso você acaba com um bloco 1 pixel 'mais curto'. Mesmo se você expandir o tamanho do bloco para 24x16 pixels, você ainda acabará com um bloco que é 2 pixels 'mais curto' que os outros blocos. Essa situação piora à medida que o número de blocos desejados aumenta. Por exemplo, tente subdividir um comprimento de 100 em 30 blocos. É impossível. Você ou usa um comprimento de 3 e obtém 34 blocos, ou 4 e obtém 25 blocos. Obter exatamente 30 blocos de tamanho igual é impossível! A partir do IM v6.5.8-9 você agora pode adicionar a flag especial '@' ao argumento "[-crop](https://imagemagick.org/command-line-options/#crop)". Essa flag diz ao operador "[-crop](https://imagemagick.org/command-line-options/#crop)" para tentar o seu melhor para dividir igualmente a imagem no número de blocos fornecido. Por exemplo...
magick rose: -crop 3x3@ +repage +adjoin rose_3x3@_%d.gif
O resultado é que a imagem foi dividida em blocos que têm tamanhos ligeiramente diferentes. No entanto, o tamanho do bloco diferirá em no máximo 1 pixel! Confira! Como bônus, você também pode subdividir a imagem de modo que cada bloco se 'sobreponha' aos seus vizinhos. Você faz isso usando não apenas uma flag '@' mas também especificando o número de pixels de sobreposição que você deseja. Por exemplo, vamos dividir a rose em quartos mas com uma sobreposição de 20 pixels.
magick rose: -crop 2x2+20+20@ +repage +adjoin rose_2x2+20+20@_%d.gif
Novamente, todas as peças diferirão em tamanho em no máximo um pixel! Embora neste caso as imagens resultantes tenham o mesmo tamanho, pois a rose pode ser dividida por 2, igualmente. Isso, no entanto, não seria o caso se a sobreposição ou a imagem tivesse um número ímpar de tamanho. Nesse caso, o elemento maior ficaria ao longo das bordas superior e esquerda. Com três blocos, no entanto, o elemento maior (ou menor) será colocado no meio! Você pode até usar uma sobreposição negativa para 'pular' exatamente essa quantidade de pixels entre os blocos! Exatamente como você deve aplicar o operador depende de exatamente quais pixels você deseja 'sobrepor', ou 'pular'. E isso depende das características de 'borda' da imagem (veja Separando Imagens em Mosaico Espaçadas abaixo). Como em qualquer uso do operador "[-crop](https://imagemagick.org/command-line-options/#crop)", é recomendado que você use um "[+repage](https://imagemagick.org/command-line-options/#repage) para remover o deslocamento de 'página' se ele não for desejado. Mas a informação de deslocamento da imagem recortada pode ser muito útil, e é por isso que ela é preservada. Você pode, por exemplo, usá-la para nomear os arquivos de saída, ou descobrir o tamanho e as localizações dos blocos que o IM calculou. Observe que o recorte em mosaico de tamanho igual é a única situação em que o operador "[-crop](https://imagemagick.org/command-line-options/#crop)" ignora a tela virtual real da imagem ao calcular qual parte da imagem é recortada. Ou seja, os cálculos para o recorte em mosaico são baseados no tamanho real da imagem em vez do tamanho da tela virtual. Mesmo assim, os deslocamentos finais dos blocos ainda serão relativos à tela virtual original. Essa opção de crop também pode ser usada como uma alternativa ao Operador Shave para imagens 'com página'. |
Antes da versão v6.6.1-0 do IM, o recorte em mosaico de tamanho igual para imagens com um deslocamento de tela virtual estava com defeito. |
|---|---|
Separando Imagens em Mosaico Espaçadas
Frequentemente você tem uma imagem que tem blocos de tamanho fixo que são separados por uma quantidade fixa de espaço. A nova flag '@' do operador crop permitirá que você recorte esses blocos mais facilmente, incluindo ou pulando o espaço ao redor. O principal problema, no entanto, é que, embora as imagens de 'bloco' tenham uma quantidade fixa de espaço ao redor delas, a quantidade de espaço ao redor da borda geralmente não é tão fixa. Isso produz três estilos básicos de características de borda para um conjunto de imagens 'espaçadas'. e cada tipo precisa ser tratado de forma ligeiramente diferente. Blocos Montados Aqui as imagens originais simplesmente receberam uma borda de tamanho fixo antes de serem anexadas juntas. O resultado é que você sempre terá um número par de pixels de espaçamento entre os blocos. Mais importante, o 'espaçamento de borda' é exatamente metade do espaçamento que foi colocado entre os blocos. Isso é, de fato, como o "[montage](montage.html)" espaça as 'células' de mosaico, e foi usando esse comando que a imagem de exemplo mostrada abaixo foi gerada. Como as imagens foram simplesmente colocadas em mosaico juntas, você pode usar tanto um Recorte em Mosaico normal (se você souber o tamanho do bloco), quanto usar Recorte de Tamanho Igual (se você souber o número de blocos), para separar as subimagens e a borda ao redor. Basicamente não há sobreposição entre os blocos, e um simples Operador Shave pode então ser usado para remover essa borda dos blocos resultantes.
magick montage.gif -crop 5x1@ +repage +adjoin montage_%d.gif
magick montage_?.gif -shave 3x3 montage-3_%d.gif
Mesmo Espaçamento ao Redor da Borda Aqui as subimagens não foram apenas 'espaçadas' por 6 pixels, mas também têm um espaçamento de 6 pixels ao redor da borda, fazendo com que pareça bem organizado e arrumado. Isso é tratado usando o Recorte de Tamanho Igual padrão com a quantidade apropriada de 'sobreposição' de pixels. Por exemplo...
magick edged.gif -crop 5x1+6+6@ +repage +adjoin edged+6_%d.gif
Observe como o operador separou as imagens de modo que elas permaneçam do mesmo tamanho, mas com uma sobreposição de 6 pixels. Isso é especificamente o que foi projetado para fazer. Ao usar um deslocamento negativo, você diz ao IM que a área sobreposta (partes de espaçamento) não deve ser incluída nos resultados finais.
magick edged.gif -crop 5x1-6-6@ +repage +adjoin edged-6_%d.gif
Se eu fosse mais longe e subtraísse mais pixels, eu poderia até aparar parte da borda branca dos números acima.
magick edged.gif -crop 5x1-8-8@ +repage +adjoin edged-8_%d.gif
Você pode até usar isso como um método alternativo para o Operador Shave, simplesmente especificando um recorte de 1 bloco...
magick edged+6_0.gif -crop 1x1-6-6@ +repage tile-shave.gif
Blocos Simplesmente Espaçados As imagens em mosaico espaçadas mais simples não têm espaçamento de borda, ou tiveram esse espaçamento de borda Aparado da imagem. No entanto, para que isso seja tratado, você precisa informar ao IM dessa situação especial, incluindo AMBAS as flags '@' e '!'.
magick spaced.gif -crop 5x1+6+6@\! +repage +adjoin spaced+6_%d.gif
Observe que as imagens nas bordas dessa subdivisão são ligeiramente mais curtas que as imagens no meio. É por isso que esse 'modo' especial de operação NÃO é o padrão, mesmo que seja na verdade mais simples que a categoria anterior de blocos espaçados. Observe também que, ao usar ambas as flags '@' e '!', um recorte de bloco único (verticalmente neste caso) não tem nenhum efeito, pois tanto o topo quanto a base do bloco são 'bordas', e portanto não têm 'espaço de borda' para ser removido. Novamente, ao usar um valor negativo para a sobreposição, você pode dizer ao IM para não incluir a área sobreposta (espaçamento) nos resultados do recorte de bloco.
magick spaced.gif -crop 5x1-6-6@\! +repage +adjoin spaced-6_%d.gif
| O caractere '!' tem significado especial para alguns shells UNIX, como o "csh", e deve ser escapado com uma barra invertida, mesmo quando colocado dentro de aspas.
---|---
Com essas fórmulas, você agora deveria ser capaz de recortar em mosaico imagens que formam uma grade, mesmo quando as imagens estão sobrepostas, ou espaçadas. Mesmo que o problema específico que você tem não se encaixe exatamente em um dos casos acima, você deveria ser capaz de adicionar ou remover pixels de borda apropriadamente para que a imagem se encaixe em uma das categorias de imagens espaçadas acima.
Adicionando/Removendo Bordas da Imagem
Borda, adicionando espaço ao redor da imagem
Frequentemente você simplesmente quer adicionar um pouco de espaço de trabalho ao redor da borda de uma imagem, mas você não quer precisar ou depender de saber o tamanho de uma imagem para fazer isso. Agora, há muitas maneiras de adicionar espaço extra a uma imagem, fora as adições diretas de espaço, incluindo anexar imagens em branco ou rótulos, compor sobreposições 'Src', ou até mesmo simplesmente posicionar a imagem em uma tela maior. Mas esses métodos geralmente precisam de pelo menos alguma ideia de quão grande é a imagem com a qual você está trabalhando. Uma das formas mais simples de adicionar espaço à imagem é a operação "[-border](https://imagemagick.org/command-line-options/#border)". A cor do espaço adicionado é a configuração "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)". Aqui estão alguns exemplos diretos..
magick rose: -bordercolor SkyBlue -border 10x10 border.gif
magick rose: -border 15x6 border_default.gif
magick rose: -bordercolor LimeGreen -border 10x0 border_sides.gif
magick rose: -bordercolor Tomato -border 0x10 border_topbot.gif
magick rose: -alpha set -bordercolor none -border 10 border_none.gif
Observe a última imagem de exemplo acima. A cor da borda foi definida para ser a cor transparente "none", mas para que isso funcione como esperado, precisamos garantir que a imagem realmente contenha um canal 'matte' ou 'alpha'. Observe também que, se os tamanhos de borda vertical e horizontal forem os mesmos, você pode omitir o segundo número na borda, usando apenas um único número. |
Como mostrado acima, a cor padrão usada pelo operador "[-border](https://imagemagick.org/command-line-options/#border)" é um cinza claro, pois combina bem com a cor cinza padrão de página das páginas da web na WWW. |
|---|---|
| Você pode especificar bordas como uma porcentagem do tamanho da imagem... |
magick rose: -border 10%x10% border_percent.jpg
![[IM Output]](../static/img/crop/border_percent.jpg)
Internamente, o que realmente está acontecendo é que "[-border](https://imagemagick.org/command-line-options/#border)" cria uma nova imagem do tamanho certo, e então sobrepõe a imagem de origem original sobre esse novo fundo. Isso em si é uma operação muito útil no ImageMagick, para definir o fundo de imagens transparentes e semitransparentes. Ou seja, a operação aparentemente inútil "-border 0" é, na versão 6 do IM, uma operação muito útil. Por exemplo...
magick star.gif -bordercolor LimeGreen -border 0 star_background.gif
| Claro que há muitas outras maneiras de Remover a Transparência Alfa. | O fato de que adicionar uma borda a imagens com transparência também preenche por padrão o fundo transparente da imagem tem sido causa de algum debate entre os usuários do IM e a equipe de desenvolvimento. Um resumo desse debate é dado emBorda, Moldura e uso do BorderColor. |
|---|---|
Borda e Composição Alfa
A sobreposição da imagem sobre a tela da cor de borda é controlada pela configuração "[-compose](https://imagemagick.org/command-line-options/#compose)", que por padrão está definida como composição alfa '[Over](compose.html#over)'. Se ela for definida com alguma outra configuração, a operação "[-border](https://imagemagick.org/command-line-options/#border)" pode produzir resultados inesperados. Por exemplo, aqui estão alguns dos usos mais interessantes de "[-compose](https://imagemagick.org/command-line-options/#compose)" com o operador de imagem "[-border](https://imagemagick.org/command-line-options/#border)", quando aplicado a uma imagem que contém algumas áreas transparentes.
magick star.gif -bordercolor LimeGreen \
-compose {_operation_} -border 5 {_result_}
A escolha entre usar 'Over' e 'Copy' essencialmente decide se você quer preservar a transparência na imagem ou não. Por exemplo, aqui está a mesma imagem 'star' com transparência, mas desta vez a borda foi adicionada sem destruir a transparência da imagem. |
magick star.gif -bordercolor LimeGreen -compose Copy \
-border 5 star_border_copy.gif
![[IM Output]](../static/img/crop/star_border_copy.gif)
A composição '[Src](compose.html#src)' adicionará uma borda transparente a uma imagem (se ela tiver um canal alfa), independentemente da configuração "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" atual. Basicamente, a tela de fundo que o "[-border](https://imagemagick.org/command-line-options/#border)" gerou é ignorada. O '[Dst](compose.html#dst)' pode não parecer muito útil, mas pode ser usado para gerar uma tela do mesmo tamanho (ou um pouco maior) que a imagem original. A imagem original é usada apenas para determinar o tamanho final da tela. Para mais exemplos veja Telas Dimensionadas para uma Imagem Existente. Para mais informações sobre os vários métodos de "[-compose](https://imagemagick.org/command-line-options/#compose)" veja os Exemplos de Composição Alfa.
Borda e Tela Virtual
Quando "[-border](https://imagemagick.org/command-line-options/#border)" é aplicado a uma imagem que contém uma tela virtual, ele ainda adicionará a borda ao redor da imagem real nessa tela virtual, e NÃO ao redor de toda a tela.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -border 5x5 paged_border.gif
Observe que o tamanho da tela virtual também foi aumentado pelo dobro da espessura da borda para acomodar a borda adicionada. Isso, claro, significa que você não pode simplesmente adicionar uma Borda a uma animação GIF típica diretamente, a menos que você queira realmente identificar os subquadros individuais da animação (por exemplo, veja o script Montagem de Quadros de Animação que usa isso como uma opção para 'emoldurar' as imagens sobrepostas). Se você quiser adicionar uma borda, você deveria Coalescer a animação primeiro para remover quaisquer Otimizações de Quadro que ela possa ter primeiro.
Moldura, adicionando uma borda tipo 3D
O operador "[-frame](https://imagemagick.org/command-line-options/#frame)" é muito semelhante a "[-border](https://imagemagick.org/command-line-options/#border)", e se você olhar a primeira imagem de exemplo gerada abaixo, você verá que ele produzirá exatamente o mesmo resultado, exceto que usou a "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)" em vez de "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)". Observe que "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" ainda é usado na geração de imagens emolduradas, veja abaixo. Para usar "[-frame](https://imagemagick.org/command-line-options/#frame)" adequadamente você precisa fornecer quatro argumentos ao comando, em vez de apenas 2. Os argumentos extras especificam a largura dos chanfros 'externo' e 'interno' da moldura sendo produzida. Aqui estão alguns exemplos de uso do operador "[-frame](https://imagemagick.org/command-line-options/#frame)" com várias configurações.
magick rose: -frame 10x10 frame.gif
magick rose: -frame 15x6+2+2 frame_wierd.gif
magick rose: -mattecolor SkyBlue -frame 6x6+2+2 frame_blue.gif
magick rose: -mattecolor Tomato -frame 10x10+5+5 frame_red.gif
magick rose: -frame 10x10+10+0 frame_rasied.gif
magick rose: -frame 10x10+6+0 frame_rasied_part.gif
magick rose: -frame 10x10+0+6 frame_sunken_part.gif
magick rose: -frame 10x10+0+10 frame_sunken.gif
Usar múltiplas operações de moldura também pode produzir estilos de emolduramento mais estranhos.
magick rose: -frame 10x10+3+3 frame_normal.gif
magick rose: -frame 3x3+3+0 -frame 7x7+3+0 frame_popped.gif
magick rose: -frame 7x7+0+3 -frame 3x3+0+3 frame_pressed.gif
magick rose: -frame 3x3+3+0 -frame 4x4 -frame 3x3+0+3 frame_inverted.gif
| A "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)" padrão é um cinza ligeiramente mais escuro que o da configuração padrão de "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)". Isso também permite que ela combine com a cor cinza padrão de páginas da web na WWW (usada por navegadores antigos como o "mosaic" e o "netscape". (Veja abaixo)
---|---
| Embora "[-frame](https://imagemagick.org/command-line-options/#frame)" possa de fato usar a cor "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)", ele também gera mais quatro cores extras a partir dessa base para uso no desenho da moldura. Ou seja, cinco cores relacionadas provavelmente serão adicionadas a uma imagem, não apenas uma.
---|---
Com algum esforço você pode até reproduzir uma imagem emoldurada estilo "magick montage" completa com rótulo de texto. |
magick rose: -mattecolor grey -background grey -frame 3x3+0+3 \
-gravity South -splice 0x15 -annotate 0x0 'A Red Rose' \
-frame 6x6+3+0 frame_montage.gif
![[IM Output]](../static/img/crop/frame_montage.gif)
Você pode até usar uma "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)" semitransparente para a moldura "[-frame](https://imagemagick.org/command-line-options/#frame)" e então 'sobrepor por baixo' um padrão interessante (como uma Tela de Plasma Fractal), para produzir uma moldura mais colorida. |
magick rose: -alpha set -mattecolor '#CCC6' -frame 10x10+3+4 \
\( -size 100x100 plasma:fractal -normalize -blur 0x1 \) \
-compose DstOver -composite frame_plasma.gif
![[IM Output]](../static/img/crop/frame_plasma.gif)
Alternativamente, você pode colorir a moldura separadamente, (gerada usando uma configuração de composição 'Dst' especial), e então sobrepor a imagem na moldura depois de tê-la colorido. Mas isso fica realmente muito complicado. Para técnicas mais avançadas de uso de molduras, veja Técnicas de Emolduramento.
Moldura e Composição Alfa
A moldura está intimamente relacionada ao operador "[-border](https://imagemagick.org/command-line-options/#border)". Não apenas uma moldura é desenhada usando a "[-mattecolor](https://imagemagick.org/command-line-options/#mattecolor)", mas esse operador também fará uso da configuração "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" para definir o fundo no qual a moldura é inicialmente desenhada. Agora, para imagens que não têm transparência, a "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" não será visível, pois é sobreposta pela própria imagem. Mas para imagens que contêm algumas áreas transparentes, a cor de fundo se torna visível. |
magick star.gif -frame 6x6+2+2 star_framed.gif
![[IM Output]](../static/img/crop/star_framed.gif)
Em outras palavras, "[-frame](https://imagemagick.org/command-line-options/#frame)" age como se você pegasse sua imagem e a sobrepusesse em uma moldura de quadro com um fundo de cor sólida. Como tal, qualquer parte da sua imagem que seja transparente será substituída pela "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)", que por padrão é uma cor cinza claro. | O fato de que adicionar uma moldura a imagens com transparência também preenche por padrão o fundo transparente da imagem com a bordercolor causou algum debate entre os usuários do IM e a equipe de Desenvolvimento. Um resumo desse debate é dado emBorda, Moldura e uso do BorderColor.
---|---
Se você quiser preservar a transparência da imagem, enquanto a emoldura, você tem duas soluções. A primeira é usar uma "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" transparente, como 'none'. |
magick star.gif -bordercolor none -frame 6x6+2+2 star_framed_none.gif
![[IM Output]](../static/img/crop/star_framed_none.gif)
A outra solução, e o método preferido, é garantir que os pixels transparentes sejam preservados quando a imagem é adicionada à moldura. Isso é feito usando um método especial de "[-compose](https://imagemagick.org/command-line-options/#compose)" chamado '[Copy](compose.html#copy)'. |
magick star.gif -compose Copy -frame 6x6+2+2 star_framed_copy.gif
![[IM Output]](../static/img/crop/star_framed_copy.gif)
| O uso de "-bordercolor" como a imagem de fundo tanto para "[-border](https://imagemagick.org/command-line-options/#border)" quanto para "[-frame](https://imagemagick.org/command-line-options/#frame)" foi adicionado ao IM com a versão 6.1.4. Antes disso, a tela de fundo gerada consistia em uma tela preta sobre a qual a borda, ou moldura, era desenhada.
Esse uso do preto era especialmente ruim para o comando "magick montage", que faz uso intenso da função interna "[-frame](https://imagemagick.org/command-line-options/#frame)" em seu processamento interno. (Veja Tratamento de Fundo e Transparência do Montage)
---|---
Como você pode ver, o operador "[-frame](https://imagemagick.org/command-line-options/#frame)", assim como "[-border](https://imagemagick.org/command-line-options/#border)", também usa a configuração "[-compose](https://imagemagick.org/command-line-options/#compose)" para definir como a imagem de origem é sobreposta sobre a moldura de fundo.
magick star.gif -bordercolor LimeGreen \
-compose {_operation_} -frame 6x6+2+2 {_result_}
O uso de uma configuração de "[-compose](https://imagemagick.org/command-line-options/#compose)" de '[Copy](compose.html#copy)' torna-se muito importante se você também quiser usar a configuração "[-bordercolor](https://imagemagick.org/command-line-options/#bordercolor)" em molduras do "magick montage". Veja Tratamento de Fundo e Transparência do Montage para mais detalhes.
Moldura e Tela Virtual
Assim como Borda e Tela Virtual, a moldura também é aplicada ao redor da imagem real nessa tela virtual, e NÃO ao redor de toda a tela.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -frame 5x5+2+2 paged_framed.gif
Observe que o tamanho da tela virtual também foi aumentado pelo dobro da espessura da borda para acomodar a moldura adicionada. Isso, claro, significa que você não pode simplesmente adicionar uma Moldura a uma animação GIF típica diretamente, a menos que você queira realmente identificar os subquadros individuais da animação (por exemplo, veja Montagem de Quadros de Animação). Se você quiser adicionar uma borda, você deveria Coalescer a animação primeiro para remover quaisquer Otimizações de Quadro que ela possa ter primeiro.
Aparar (Shave), removendo bordas de uma imagem
O inverso dos operadores "[-border](https://imagemagick.org/command-line-options/#border)" ou "[-frame](https://imagemagick.org/command-line-options/#frame)" é o "[-shave](https://imagemagick.org/command-line-options/#shave)", que, se receber os mesmos argumentos, removerá o espaço adicionado por esses comandos.
magick border.gif -shave 10x10 shave.gif
magick border.gif -shave 10x0 shave_sides.gif
magick border.gif -shave 0x20 shave_topbot.gif
A principal coisa a ter em mente sobre esses três operadores é que eles adicionam e removem espaço em lados opostos das imagens, não apenas um lado, ou lados adjacentes. Se você quiser remover apenas uma borda de uma imagem, então você precisará usar o operador "[-chop](https://imagemagick.org/command-line-options/#chop)" em vez disso. (Veja os Exemplos de Chop abaixo). Como antes, todos os operadores "[-border](https://imagemagick.org/command-line-options/#border)", "[-frame](https://imagemagick.org/command-line-options/#frame)", e "[-shave](https://imagemagick.org/command-line-options/#shave)", afetam apenas a imagem real na tela virtual e não a tela virtual em si.
magick rose: -shave 12x0 -repage 64x64+9+9 paged.gif
magick paged.gif -border 5x5 paged_border.gif
magick paged_border.gif -frame 5x5+2+2 paged_frame.gif
magick paged_frame.gif -shave 10x10 paged_shave.gif
Uma alternativa ao uso do shave é usar o novo operador Recorte em Mosaico de Tamanho Igual. A vantagem desse operador é que, ao contrário de "[-shave](https://imagemagick.org/command-line-options/#shave), ele não modificará o tamanho da tela da imagem resultante.
magick paged_frame.gif -crop 1x1-10-10@ paged_tile_shave.gif
| Antes da versão v6.6.1-0 do IM, o recorte em mosaico de tamanho igual para imagens com um deslocamento de tela (como o acima) estava com defeito.
---|---
Extensão (Extent), Ajuste Direto do Tamanho da Imagem
Após algumas discussões, um operador para ajustar diretamente o tamanho final de uma imagem foi adicionado à versão 6.2.4 do IM. O operador "[-extent](https://imagemagick.org/command-line-options/#extent)". Se o tamanho da imagem aumentar, espaço será adicionado às bordas direita ou inferior da imagem. Se diminuir, os dados da imagem são simplesmente descartados ou recortados para caber no novo tamanho da imagem. Em ambos os casos, a área superior esquerda da imagem provavelmente permanecerá inalterada.
magick rose: -background skyblue -extent 100x60 extent_enlarge.gif
magick rose: -background skyblue -extent 40x40 extent_shrink.gif
magick rose: -background skyblue -extent 100x40 extent_wider.gif
magick rose: -background skyblue -extent 40x60 extent_taller.gif
Como você pode ver, ele preencherá quaisquer novas áreas com a cor "[-background](https://imagemagick.org/command-line-options/#background)" de quaisquer novas áreas adicionadas à imagem. |
Antes da versão v6.3.2 do IM, "[-extent](https://imagemagick.org/command-line-options/#extent)" simplesmente limpava a memória de quaisquer novas áreas para zero, ou preto puro. Ele não preenchia as áreas com a cor "[-background](https://imagemagick.org/command-line-options/#background)". |
|---|---|
Também, após o IM v6.3.2, "[-extent](https://imagemagick.org/command-line-options/#extent)" usará a "[-gravity](https://imagemagick.org/command-line-options/#gravity)" para definir onde as áreas adicionadas/removidas são posicionadas em relação à imagem original. |
magick rose: -gravity north -extent 100x80 extent_north.gif
magick rose: -gravity south -extent 100x80 extent_south.gif
magick rose: -gravity east -extent 100x80 extent_east.gif
magick rose: -gravity west -extent 100x80 extent_west.gif
magick rose: -gravity center -extent 100x80 extent_center.gif
magick rose: -gravity center -extent 40x80 extent_center2.gif
O último exemplo acima mostra que o extent também pode fazer recortes centralizados, mas sem a necessidade de um "[-repage](https://imagemagick.org/command-line-options/#repage)", embora ele 'achate' a imagem com a cor "[-background](https://imagemagick.org/command-line-options/#background)" atual. Você pode até usar deslocamentos, o que basicamente significa que o Operador Extent é simplesmente um Recorte direto com preenchimento de fundo, independentemente da posição. |
magick rose: -background skyblue -extent 100x100-15-25 extent.png
![[IM Output]](../static/img/crop/extent.png)
Essa capacidade de tanto recortar quanto estender uma imagem de acordo com a gravidade torna o operador perfeito para preencher ou recortar uma imagem de modo que ela caiba em uma área de tamanho específico, por exemplo, veja Preencher/Completar uma Miniatura para Caber. Observe que "[-extent](https://imagemagick.org/command-line-options/#extent)" funciona usando a mesma técnica de 'sobreposição' que tanto os operadores Border quanto Frame usam. Como tal, por padrão, usá-lo com uma imagem que contém transparência substituirá a transparência pela cor "[-background](https://imagemagick.org/command-line-options/#background)" atual. |
magick star.gif -background LimeGreen -extent 80x80-10-10 star_extent.gif
![[IM Output]](../static/img/crop/star_extent.gif)
Novamente, a solução para isso é definir um método "[-compose](https://imagemagick.org/command-line-options/#compose)" apropriado, ou definir a cor "[-background](https://imagemagick.org/command-line-options/#background)" como 'None'.
Adicionando/Removendo Linhas, Colunas e Bordas
Emenda (Splice), adicionando linhas, colunas e bordas
O operador "[-splice](https://imagemagick.org/command-line-options/#splice)" é novo na versão 6 do IM, veja Splice, exemplo da criação de um novo operador de imagem. Ele basicamente fornece a muito necessária capacidade de adicionar uma linha, coluna de espaço no meio ou em uma borda de uma imagem. A cor do espaço inserido vem da configuração de cor "[-background](https://imagemagick.org/command-line-options/#background)".
magick rose: -background blue -splice 20x10+40+30 splice.gif
magick rose: -background blue -splice 20x0+40+0 splice_column.gif
magick rose: -background blue -splice 0x10+0+30 splice_row.gif
magick rose: -background blue -splice 20x10 splice_topleft.gif
| Se a cor de fundo não for definida, o IM tentará determinar esse valor a partir da própria imagem. Isso significa que para algumas imagens ela pode ser branca (o padrão normal), em outras pode ser preta, ou para o formato GIF pode ser qualquer cor de fundo que foi definida quando essa imagem foi salva. O que isso basicamente significa é que se você não definir a cor "[-background](https://imagemagick.org/command-line-options/#background)", seu valor padrão depende da imagem, e você pode obter praticamente qualquer coisa. Sempre defina "[-background](https://imagemagick.org/command-line-options/#background)", antes de usar um operador que a utilize.
---|---
Agora, embora adicionar uma linha e coluna a uma imagem seja bom, o operador "[-splice](https://imagemagick.org/command-line-options/#splice)" é ideal para adicionar espaço a apenas uma borda de uma imagem. Qual borda é determinada usando a opção "[-gravity](https://imagemagick.org/command-line-options/#gravity)" e a configuração de geometria do splice.
magick rose: -background blue -splice 0x10 splice_top.gif
magick rose: -gravity south \
-background blue -splice 0x10 splice_bottom.gif
magick rose: -background blue -splice 20x0 splice_left.gif
magick rose: -gravity east \
-background blue -splice 20x0 splice_right.gif
magick rose: -gravity southeast \
-background blue -splice 20x10 splice_botright.gif
Um dos usos mais comuns do splice é adicionar espaço no qual desenhar um rótulo. (Veja Rotulando Imagens) |
magick rose: -gravity South -background LimeGreen -splice 0x15 \
-annotate 0x0 'Rose' splice_label.gif
Corte (Chop), removendo linhas, colunas e bordas
O inverso natural de "[-splice](https://imagemagick.org/command-line-options/#splice)" é o operador muito mais antigo "[-chop](https://imagemagick.org/command-line-options/#chop)". Dado o mesmo argumento que "[-splice](https://imagemagick.org/command-line-options/#splice)" e a mesma configuração "[-gravity](https://imagemagick.org/command-line-options/#gravity)", "[-chop](https://imagemagick.org/command-line-options/#chop)" restaurará a imagem à sua forma original.
magick splice.gif -chop 20x10+40+30 splice_chop.gif
magick splice_chop.gif -chop 20x10+30+20 chop.gif
magick chop.gif -background grey \
-splice 20x10+30+20 chop_splice.gif
Continuei processando o último exemplo para mostrar como você pode reverter a ordem de "[-splice](https://imagemagick.org/command-line-options/#splice)" e "[-chop](https://imagemagick.org/command-line-options/#chop)" de modo a 'limpar' uma linha ou coluna (ou ambas) do meio de uma imagem sem usar desenhos ou sobreposições. O chop é mais comumente usado para cortar uma única borda de uma imagem, usando a gravidade para selecionar essa borda. Por exemplo...
magick frame_red.gif -chop 0x10 chop_top.gif
magick frame_red.gif -chop 10x0 chop_left.gif
magick frame_red.gif -gravity East -chop 10x0 chop_right.gif
magick frame_red.gif -gravity South -chop 0x10 chop_bottom.gif
Como alternativa ao uso de "[-chop](https://imagemagick.org/command-line-options/#chop)" para remover uma única borda, você pode de fato usar o operador mais universal "[-crop](https://imagemagick.org/command-line-options/#crop)" em vez disso. Isso não requer o uso de "[-gravity](https://imagemagick.org/command-line-options/#gravity)" para obter as bordas inferior ou direita, no entanto, requer que você faça "[+repage](https://imagemagick.org/command-line-options/#repage)" na tela da imagem depois.
magick frame_red.gif -crop +0+10 +repage crop_edge_top.gif
magick frame_red.gif -crop +10+0 +repage crop_edge_left.gif
magick frame_red.gif -crop -10+0 +repage crop_edge_right.gif
magick frame_red.gif -crop +0-10 +repage crop_edge_bottom.gif
Isso depende do fato de que se "[-crop](https://imagemagick.org/command-line-options/#crop)" não receber uma área de imagem para remover, ele assumirá por padrão o tamanho da tela da imagem (não a imagem real, mas a tela virtual da imagem). Isso significa que você pode (para imagens simples) remover bordas de imagem apenas deslocando a área de recorte que está sendo cortada. O método de usar "[-crop](https://imagemagick.org/command-line-options/#crop)" para 'cortar' as bordas da imagem foi descoberto e publicado por Don Sheythe, e após alguma discussão foi considerado um 'recurso' do IM, e assim incluído aqui.
Técnicas Avançadas de Recorte
Recortar para uma Dada Proporção de Aspecto
Você pode recortar imagens para se ajustar a uma proporção de aspecto específica, mas é complicado e usa algumas técnicas matemáticas do tipo 'faça você mesmo'. Por exemplo, você pode escrever um script para fazer os cálculos e então fazer o Recorte. Ou, no IM v6, você pode fazer cálculos com o Distort Viewport, para extrair a parte desejada da imagem durante uma Distorção No-Op, como descrito em Recorte Quadrado Centralizado. No entanto, na versão 7 do ImageMagick, você agora pode fazer cálculos matemáticos diretamente em comandos como "[-crop](https://imagemagick.org/command-line-options/#crop)" e "[-extent](https://imagemagick.org/command-line-options/#extent)", contornando assim a necessidade de usar indevidamente o "[-distort](https://imagemagick.org/command-line-options/#distort)". Isso é discutido em detalhes no Fórum dos Desenvolvedores do IM Recortar para Proporção de Aspecto.
Aparar (Trim), o Operador de 'Auto-Recorte'
O operador "[-trim](https://imagemagick.org/command-line-options/#trim)" é uma relação muito próxima do altamente versátil operador "[-crop](https://imagemagick.org/command-line-options/#crop)" discutido acima. No entanto, em vez de fornecer um argumento, esse operador tenta remover quaisquer bordas ou margens de uma imagem que não mudam de cor ou transparência. Em outras palavras, ele remove as partes 'chatas' que cercam uma imagem. |
Observe que na versão 5 do ImageMagick e anteriores, uma operação de auto-recorte era alcançada usando um argumento '0x0' ao operador "[-crop](https://imagemagick.org/command-line-options/#crop)". Isso não é mais o caso, pois argumentos de tamanho 'zero' no crop agora denotam 'infinito' ou 'até o limite do tamanho da imagem'. Como tal, um argumento '0x0' para o crop agora efetivamente significa recortar a imagem em blocos, do tamanho da tela da imagem original. Em outras palavras, com o IM v6, o resultado será o mesmo que a imagem original, ou um 'no-op'. |
|---|---|
| Por exemplo, aqui pegamos o logo do IM, que redimensionamos, e 'aparamos' ou 'auto-recortamos' todo o espaço extra ao redor no logo. |
magick logo: -resize 30% -trim trim.gif
Duas coisas devem ser observadas no exemplo acima. A primeira é que, assim como "[-crop](https://imagemagick.org/command-line-options/#crop)", "[-trim](https://imagemagick.org/command-line-options/#trim)" reterá o tamanho da tela da imagem. Isso significa que os argumentos numéricos do trim podem ser extraídos, para permitir processamento adicional, ou ajuste do processamento da imagem (veja Aparando Imagens "Ruidosas" para um exemplo de como fazer isso). ![[IM Output]](../static/img/crop/trim.gif)
Aqui aparamos a imagem, mas apenas para listar o resultado sobre que parte da imagem foi aparada, não a imagem realmente aparada.
magick logo: -resize 30% -trim info:-
No entanto, se você não se importa com essa informação, simplesmente descarte-a redefinindo as informações de página da imagem usando um operador "[+repage](https://imagemagick.org/command-line-options/#repage)", ou salvando em um formato que não salva informações de tela (como o formato JPEG). Aqui fazemos ambos, para deixar claro que estamos descartando as informações de tela. |
magick logo: -resize 30% -trim +repage trim_repage.jpg
![[IM Output]](../static/img/crop/trim_repage.jpg)
A segunda coisa a observar é que o trim não aparou de fato até a borda absoluta da imagem final. Isso é especialmente perceptível no canto inferior direito da imagem do logo, onde podemos ver uma lacuna distinta entre o pé e sua sombra e a borda aparada. Nesse canto, as cores aqui ficaram numericamente diferentes da cor de fundo da imagem. Então, mesmo que não possamos ver nenhuma mudança real na imagem, o operador "[-trim](https://imagemagick.org/command-line-options/#trim)" vê uma pequena mudança de cor, então ele não aparou tão próximo da imagem quanto teríamos esperado. Se a imagem for toda de uma cor, então "[-trim](https://imagemagick.org/command-line-options/#trim)" aparará a imagem até uma Imagem Perdida transparente mínima de um único pixel. Isso é lógico e previne problemas mais sérios se a imagem fosse deixada como está.
Aparando com uma Cor Específica
Um dos problemas mais preocupantes com "[-trim](https://imagemagick.org/command-line-options/#trim)", especialmente em scripts de processamento de imagem automatizados, é que o trim pode ser um pouco imprevisível. Ele não se limita, por exemplo, a apenas uma cor específica, ou mesmo a uma cor. Como tal, você pode facilmente aparar muito mais do que espera. Por exemplo, vamos fazer um trim simples de uma imagem simples de cores listradas.
magick -size 32x32 xc:red xc:green xc:blue +append stripes.gif
magick stripes.gif -trim +repage stripes_trimmed.gif
Como você pode ver, "[-trim](https://imagemagick.org/command-line-options/#trim)" aparou não apenas uma cor, mas duas cores! Em um script automático, isso pode ser muito ruim e produzir resultados inesperados. Se você sabe qual cor quer aparar de uma imagem, então a melhor maneira é adicionar uma pequena "[-border](https://imagemagick.org/command-line-options/#border)" de um pixel de largura dessa cor à imagem. Vamos pegar 'red' neste caso.
magick stripes.gif -bordercolor red -border 1x1 \
-trim +repage stripes_trim_red.gif
magick stripes.gif -bordercolor red -border 1x1 -trim \
stripes_trim_red_shifted.gif
![[IM Output]](../static/img/crop/stripes_trim_red_shifted.gif)
Então vamos tentar corrigir o tamanho da tela virtual (subtrair _border_width_ x2 ) e o deslocamento (subtrair _border_width_) ao aparar uma cor específica. |
magick stripes.gif -bordercolor red -border 1x1 -trim \
-set page '%[fx:page.width-2]x%[fx:page.height-2]+%[fx:page.x-1]+%[fx:page.y-1]' \
stripes_trim_red_fix.gif
![[IM Output]](../static/img/crop/stripes_trim_red_fix.gif)
Observe que estou restaurando o tamanho e o deslocamento da tela da imagem original, que o Operador Border ampliou e deslocou no exemplo acima. A operação "[-trim](https://imagemagick.org/command-line-options/#trim)" em si preservou a localização da imagem corretamente. É, como você pode ver, um ajuste bastante incômodo. Alternativamente, se você não se importa com o tamanho da tela (típico em uma imagem em camadas), você pode usar um Repage Relativo muito mais simples para apenas ajustar a posição da imagem na tela ampliada. |
magick stripes.gif -bordercolor red -border 1x1 -trim \
-repage -1-1\! stripes_trim_red_fix2.gif
Aparando Apenas Um Lado de uma Imagem
Como você viu acima, "[-trim](https://imagemagick.org/command-line-options/#trim)" aparará quantos lados puder. Indo até mesmo ao ponto de remover duas cores diferentes de lados diferentes (ou, se muito cuidadosamente arranjado, quatro cores poderiam ter sido removidas). Isso torna um pouco mais difícil quando você quer restringir o aparo a apenas um lado. Para garantir que aparemos apenas um lado, precisamos adicionar algumas faixas de cor ao outro lado para proteger os outros três lados. Aqui está o processo passo a passo para aparar apenas o lado 'esquerdo' ou 'oeste' da imagem 'border' que criamos anteriormente. Eu usei faixas muito mais grossas do que o necessário para que você possa vê-las melhor neste exemplo. Normalmente, uma largura de um único pixel é tudo o que é necessário.
magick border.gif -gravity East \
-background white -splice 5x0 \
-background black -splice 5x0 trim_protect.gif
magick trim_protect.gif -trim +repage trim_oneside.gif
magick trim_oneside.gif -gravity East -chop 5x0 trim_west.gif
Observe que adiciono faixas de duas cores diferentes! Dessa forma, se uma das cores corresponder à cor de borda existente que cerca a imagem, a outra continuará funcionando para proteger esses três lados. Além disso, apenas uma das cores também será aparada, deixando apenas uma faixa de cor para ser limpa. Aqui está todo o aparo de um lado como um único comando, mas para aparar a borda superior (faixas são adicionadas à borda inferior ou 'Sul').
![[IM Output]](../static/img/crop/trim_west.gif)
|
magick border.gif -gravity South \
-background white -splice 0x1 -background black -splice 0x1 \
-trim +repage -chop 0x1 trim_north.gif
![[IM Output]](../static/img/crop/trim_north.gif)
E aqui está um aparo apenas da borda inferior. Claro que as configurações "[-gravity](https://imagemagick.org/command-line-options/#gravity)" usadas no exemplo anterior não são necessárias e a configuração assume por padrão um valor 'North-West' para imagens. |
magick border.gif \
-background white -splice 0x1 -background black -splice 0x1 \
-trim +repage -chop 0x1 trim_south.gif
![[IM Output]](../static/img/crop/trim_south.gif)
Claro que, como antes com a border, emendar cores extras em uma imagem novamente mudará o tamanho da tela virtual da imagem e o deslocamento das imagens em camadas. Novamente, isso pode ser corrigido usando os mesmos métodos que mostramos na seção anterior, mas depende de qual lado você adicionou as cores extras para preservar essas bordas.
Aparando com seleção difusa de cores -- Imagens JPEG de Baixa Qualidade
Como o JPEG é 'com perdas', as cores na imagem geralmente não são uma única cor, mas uma banda ligeiramente variável de cores diferentes. por causa disso, "[-trim](https://imagemagick.org/command-line-options/#trim)" frequentemente falhará para imagens JPEG ou do mundo real. FUTURO: Exemplo de falha aqui Como tal, você precisa dizer ao ImageMagick que cores que não são exatamente as mesmas, mas estão razoavelmente próximas, devem ser tratadas como sendo as mesmas. Adicionar uma configuração "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" muito pequena fará isso.
magick image.jpg -fuzz 1% -trim +repage image_fuzzy_trim.jpg
Também é uma boa ideia especificar a cor específica em relação à qual você quer que essa difusão seja. Isso pode ser adicionado especificamente acrescentando uma borda dessa cor usando o operador "[-border](https://imagemagick.org/command-line-options/#border)". A borda, claro, sempre corresponderá à cor a ser aparada, então sempre será removida por "[-trim](https://imagemagick.org/command-line-options/#trim)". FUTURO: Exemplo de aparo de borda difusa aqui
Aparando Imagens 'Ruidosas' -- Imagens Digitalizadas
Um problema similar é enfrentado com imagens digitalizadas, onde scanners frequentemente produzem pequenos erros de um único pixel, causados por poeira, sujeira, ligeiras variações no scanner, ou apenas ruído eletrônico captado pelo leitor. Os erros de pixel, no entanto, neste caso são geralmente grandes demais para um pequeno fator de difusão superar, então uma técnica diferente é necessária para aparar tais imagens. A solução mais simples, embora frequentemente menos prática, é fazer múltiplas digitalizações da mesma imagem, ou múltiplos quadros em uma sequência estática de vídeo), e então fazer a média dos resultados para reduzir a interferência. No entanto, isso não removerá manchas de poeira no scanner nem ajudará quando apenas uma única imagem ou quadro estiver disponível, tornando esse método impraticável na maioria dos casos. Uma solução prática é uma de duas etapas. Com uma cópia da imagem, processe-a de alguma forma para de-enfatizar erros de um único pixel, ou poeira de scanner, ao mesmo tempo em que realça o efeito de grandes blocos de cores altamente contrastantes. Então, usando "[-trim](https://imagemagick.org/command-line-options/#trim)" nessa cópia, e examinando exatamente o que ele fez, você pode então "[-crop](https://imagemagick.org/command-line-options/#crop)" a imagem original não modificada na mesma quantidade. Há vários métodos de de-enfatizar erros de um único pixel. Estes incluem "[-blur](https://imagemagick.org/command-line-options/#blur)", "[-median](https://imagemagick.org/command-line-options/#median)", ou até mesmo usar Operadores Básicos de Morfologia para remover detalhes específicos, como texto e linhas finas. Este método de 'blur' oferece dois controles principais:
- O raio sigma do "
[-blur](https://imagemagick.org/command-line-options/#blur)", ou o raio de convolução do "[-median](https://imagemagick.org/command-line-options/#mediam)", que determina o tamanho das manchas de poeira que você quer ignorar. Observe que ambos esses valores podem ser um número de ponto flutuante, então você tem um controle fino sobre a quantidade de blur aplicada. Para mais informações sobre desfoque (blur), veja Desfocando Imagens. - O segundo controle é o fator de cor "
[-fuzz](https://imagemagick.org/command-line-options/#fuzz)" que controla a quantidade de mudança de cor correspondida pelo operador "[-trim](https://imagemagick.org/command-line-options/#trim)". Ou seja, quão próximo da imagem desejada você quer que o trim chegue.
Por exemplo, vamos usar uma imagem "logo:" menor. |
magick logo: -resize 30% noisy.jpg
Nesta pequena imagem poderíamos considerar as estrelas e o título na imagem como ruído que queremos que o trim ignore. As estrelas acima têm cerca de 5 pixels de largura, então queremos usar um valor de cerca do dobro disso para fazer o trim basicamente ignorá-las. ![[IM Output]](../static/img/crop/noisy.jpg)
Aqui está o resultado. Observe que neste caso não queremos uma imagem, apenas as informações de tela da imagem.
magick noisy.jpg -virtual-pixel edge -blur 0x15 -fuzz 15% -trim info:
| _Você pode precisar verificar a configuração dePixel Virtual para garantir que você obtenha os 'efeitos de borda' certos com o blur.
Alternativamente, você pode adicionar uma borda larga da mesma cor de fundo à imagem antes de desfocar e ajustar os resultados de deslocamento apropriadamente. Isso pode ser melhor para resultados mais precisos de ambos os operadores "[-blur](https://imagemagick.org/command-line-options/#blur)" e "[-trim](https://imagemagick.org/command-line-options/#trim)"._
---|---
A partir do resultado acima, podemos determinar que "[-trim](https://imagemagick.org/command-line-options/#trim)" havia internamente usado um argumento "[-crop](https://imagemagick.org/command-line-options/#crop)" de '89x121+78+23'. Esse é o tamanho real da imagem aparada, e seu deslocamento na tela virtual, e presumivelmente a localização do objeto principal (único) que estamos procurando dentro da imagem. Isso pode então ser usado na imagem original, que não foi desfocada. |
magick noisy.jpg -crop 89x121+78+23 +repage noisy_trimmed.jpg
E aqui aparamos nossa imagem apenas para o mago! ![[IM Output]](../static/img/crop/noisy_trimmed.jpg)
Isso pode ser feito em uma única linha, usando um pouco de 'script de shell UNIX' extra, e alguma formatação dos resultados desse primeiro comando. |
magick noisy.jpg -crop \
`magick noisy.jpg -virtual-pixel edge -blur 0x15 -fuzz 15% \
-trim -format '%wx%h%O' info:` +repage noisy_trimmed_2.jpg
Veja Escapes de Propriedade de Imagem para mais informações sobre a configuração "[-format](https://imagemagick.org/command-line-options/#format)" usada para controlar a saída de "[info:](files.html#info)". ![[IM Output]](../static/img/crop/noisy_trimmed_2.jpg)
| _O exemplo acima usa um recurso de linha de comando do shell UNIX para o método de 'substituição de comando' usando aspas invertidas '...' para inserir o argumento "[-crop](https://imagemagick.org/command-line-options/#crop)" gerado no comando "magick" externo.
Você pode fazer isso em um Script de Lote do Windows, usando uma construção especial FOR..DO. Siga o link acima para detalhes._
---|---
Observe que, embora a mão do mago esteja totalmente visível, a ponta do chapéu não está. Esse é o inconveniente desse método, ele ignorará pontas afiadas e detalhes finos. Mas é exatamente isso que pedimos para ele ignorar em primeiro lugar. O método poderia ser melhorado expandindo a área aparada por uma pequena quantidade (10 pixels em 4 direções), usando algum Escape FX para fazer a matemática... |
magick noisy.jpg -crop \
`magick noisy.jpg -virtual-pixel edge -blur 0x15 -fuzz 15% -trim \
-format '%[fx:w+20]x%[fx:h+20]+%[fx:page.x-10]+%[fx:page.y-10]' \
info:` +repage noisy_trimmed_3.jpg
![[IM Output]](../static/img/crop/noisy_trimmed_3.jpg)
Se os limites calculados se expandirem além da imagem original, o operador de recorte automaticamente os limitará aos limites da imagem. No IMv7 (usando o comando "magick") você pode fazer tudo em um único comando, salvando o tamanho de aparo calculado em uma configuração para uso posterior. |
magick noisy.jpg \
\( +clone -virtual-pixel edge -blur 0x15 -fuzz 15% -trim \
-set option:fuzzy_trim \
'%[fx:w+20]x%[fx:h+20]+%[fx:page.x-10]+%[fx:page.y-10]'\
+delete \) \
-crop %[fuzzy_trim] noisy_trimmed_4.jpg
![[IM Output]](../static/img/crop/noisy_trimmed_4.jpg)
Outros métodos de aparo difuso usam vários Métodos Morfológicos para remover as partes indesejadas da imagem, antes de aparar para encontrar os limites da área desejada na imagem original. Um usuário HugoRune precisou aparar uma imagem até uma região de contraste altamente diferente para fins de digitalização. Veja Discussão nos Fóruns do IM, para detalhes.
![[IM Output]](../static/img/crop/rose.gif)
![[IM Output]](../static/img/crop/crop.gif)
![[IM Output]](../static/img/crop/crop_br.gif)
![[IM Output]](../static/img/crop/crop_tl.gif)
![[IM Output]](../static/img/crop/crop_all.gif)
![[IM Output]](../static/img/crop/crop_miss.gif)
![[IM Text]](../static/img/crop/crop_indent.txt.gif)
![[IM Text]](../static/img/crop/crop_error.txt.gif)
![[IM Text]](../static/img/crop/crop_miss_ident.txt.gif)
![[IM Text]](../static/img/crop/crop_miss_data.txt.gif)
![[IM Output]](../static/img/crop/paged.gif)
![[IM Output]](../static/img/crop/crop_page.gif)
![[IM Output]](../static/img/crop/crop_page_tl.gif)
![[IM Output]](../static/img/crop/crop_page_br.gif)
![[IM Output]](../static/img/crop/crop_page_all.gif)
![[IM Output]](../static/img/crop/crop_page_miss.gif)
![[IM Text]](../static/img/crop/crop_page_ident.txt.gif)
![[IM Output]](../static/img/crop/crop_area_br.png)
![[IM Output]](../static/img/crop/repage.gif)
![[IM Output]](../static/img/crop/repage_br.gif)
![[IM Output]](../static/img/crop/repage_tl.gif)
![[IM Output]](../static/img/crop/repage_all.gif)
![[IM Output]](../static/img/crop/repage_miss.gif)
![[IM Output]](../static/img/crop/crop_vp.gif)
![[IM Output]](../static/img/crop/crop_vp_br.gif)
![[IM Output]](../static/img/crop/crop_vp_tl.gif)
![[IM Output]](../static/img/crop/crop_vp_all.gif)
![[IM Output]](../static/img/crop/crop_vp_miss.gif)
![[IM Text]](../static/img/crop/crop_vp_ident.txt.gif)
![[IM Output]](../static/img/crop/tiles_0.gif)
![[IM Output]](../static/img/crop/tiles_1.gif)
![[IM Output]](../static/img/crop/tiles_2.gif)
![[IM Output]](../static/img/crop/tiles_3.gif)
![[IM Text]](../static/img/crop/tiles_ident.txt.gif)
![[IM Output]](../static/img/crop/tiles_layered.gif)
![[IM Output]](../static/img/crop/rose_tiles_00.gif)
![[IM Output]](../static/img/crop/rose_tiles_01.gif)
![[IM Output]](../static/img/crop/rose_tiles_02.gif)
![[IM Output]](../static/img/crop/rose_tiles_03.gif)
![[IM Output]](../static/img/crop/rose_tiles_04.gif)
![[IM Output]](../static/img/crop/rose_tiles_05.gif)
![[IM Output]](../static/img/crop/rose_tiles_06.gif)
![[IM Output]](../static/img/crop/rose_tiles_07.gif)
![[IM Output]](../static/img/crop/rose_tiles_08.gif)
![[IM Output]](../static/img/crop/rose_tiles_09.gif)
![[IM Output]](../static/img/crop/rose_tiles_10.gif)
![[IM Output]](../static/img/crop/rose_tiles_11.gif)
![[IM Output]](../static/img/crop/rose_rejoined.gif)
![[IM Output]](../static/img/crop/rose_tile_1_1.gif)
![[IM Output]](../static/img/crop/rose_tile_2_1.gif)
![[IM Output]](../static/img/crop/rose_tile_3_1.gif)
![[IM Output]](../static/img/crop/rose_tile_4_1.gif)
![[IM Output]](../static/img/crop/rose_tile_1_2.gif)
![[IM Output]](../static/img/crop/rose_tile_2_2.gif)
![[IM Output]](../static/img/crop/rose_tile_3_2.gif)
![[IM Output]](../static/img/crop/rose_tile_4_2.gif)
![[IM Output]](../static/img/crop/rose_tile_1_3.gif)
![[IM Output]](../static/img/crop/rose_tile_2_3.gif)
![[IM Output]](../static/img/crop/rose_tile_3_3.gif)
![[IM Output]](../static/img/crop/rose_tile_4_3.gif)
![[IM Output]](../static/img/crop/rose_30x20_00.gif)
![[IM Output]](../static/img/crop/rose_30x20_01.gif)
![[IM Output]](../static/img/crop/rose_30x20_02.gif)
![[IM Output]](../static/img/crop/rose_30x20_03.gif)
![[IM Output]](../static/img/crop/rose_30x20_04.gif)
![[IM Output]](../static/img/crop/rose_30x20_05.gif)
![[IM Output]](../static/img/crop/rose_30x20_06.gif)
![[IM Output]](../static/img/crop/rose_30x20_07.gif)
![[IM Output]](../static/img/crop/rose_30x20_08.gif)
![[IM Output]](../static/img/crop/rose_30x20_09.gif)
![[IM Output]](../static/img/crop/rose_30x20_10.gif)
![[IM Output]](../static/img/crop/rose_30x20_11.gif)
![[IM Output]](../static/img/crop/rose_30x20_12.gif)
![[IM Output]](../static/img/crop/rose_30x20_13.gif)
![[IM Output]](../static/img/crop/rose_30x20_14.gif)
![[IM Output]](../static/img/crop/rose_30x20_15.gif)
![[IM Output]](../static/img/crop/rose_ctiles_0.gif)
![[IM Output]](../static/img/crop/rose_ctiles_1.gif)
![[IM Output]](../static/img/crop/rose_ctiles_2.gif)
![[IM Output]](../static/img/crop/rose_ctiles_3.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_0.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_1.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_2.gif)
![[IM Output]](../static/img/crop/rose_ctiles2_3.gif)
![[IM Output]](../static/img/crop/strip_column.gif)
![[IM Output]](../static/img/crop/strip_row.gif)
![[IM Output]](../static/img/crop/strips_0.gif)
![[IM Output]](../static/img/crop/strips_1.gif)
![[IM Output]](../static/img/crop/strips_2.gif)
![[IM Output]](../static/img/crop/strips_3.gif)
![[IM Output]](../static/img/crop/quadrant_tl.gif)
![[IM Output]](../static/img/crop/quadrant_tr.gif)
![[IM Output]](../static/img/crop/quadrant_bl.gif)
![[IM Output]](../static/img/crop/quadrant_br.gif)
![[IM Output]](../static/img/crop/neg_offset_1.gif)
![[IM Output]](../static/img/crop/neg_offset_2.gif)
![[IM Output]](../static/img/crop/neg_offset_3.gif)
![[IM Output]](../static/img/crop/neg_offset_4.gif)
![[IM Output]](../static/img/crop/neg_offset_5.gif)
![[IM Output]](../static/img/crop/rose_23x15_00.gif)
![[IM Output]](../static/img/crop/rose_23x15_01.gif)
![[IM Output]](../static/img/crop/rose_23x15_02.gif)
![[IM Output]](../static/img/crop/rose_23x15_03.gif)
![[IM Output]](../static/img/crop/rose_23x15_04.gif)
![[IM Output]](../static/img/crop/rose_23x15_05.gif)
![[IM Output]](../static/img/crop/rose_23x15_06.gif)
![[IM Output]](../static/img/crop/rose_23x15_07.gif)
![[IM Output]](../static/img/crop/rose_23x15_08.gif)
![[IM Output]](../static/img/crop/rose_23x15_09.gif)
![[IM Output]](../static/img/crop/rose_23x15_10.gif)
![[IM Output]](../static/img/crop/rose_23x15_11.gif)
![[IM Output]](../static/img/crop/rose_23x15_12.gif)
![[IM Output]](../static/img/crop/rose_23x15_13.gif)
![[IM Output]](../static/img/crop/rose_23x15_14.gif)
![[IM Output]](../static/img/crop/rose_23x15_15.gif)
![[IM Output]](../static/img/crop/rose_3x3@_0.gif)
![[IM Output]](../static/img/crop/rose_3x3@_1.gif)
![[IM Output]](../static/img/crop/rose_3x3@_2.gif)
![[IM Output]](../static/img/crop/rose_3x3@_3.gif)
![[IM Output]](../static/img/crop/rose_3x3@_4.gif)
![[IM Output]](../static/img/crop/rose_3x3@_5.gif)
![[IM Output]](../static/img/crop/rose_3x3@_6.gif)
![[IM Output]](../static/img/crop/rose_3x3@_7.gif)
![[IM Output]](../static/img/crop/rose_3x3@_8.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_0.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_1.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_2.gif)
![[IM Output]](../static/img/crop/rose_2x2+20+20@_3.gif)
![[IM Output]](../static/img/crop/montage.gif)
![[IM Output]](../static/img/crop/montage_0.gif)
![[IM Output]](../static/img/crop/montage_1.gif)
![[IM Output]](../static/img/crop/montage_2.gif)
![[IM Output]](../static/img/crop/montage_3.gif)
![[IM Output]](../static/img/crop/montage_4.gif)
![[IM Output]](../static/img/crop/montage-3_0.gif)
![[IM Output]](../static/img/crop/montage-3_1.gif)
![[IM Output]](../static/img/crop/montage-3_2.gif)
![[IM Output]](../static/img/crop/montage-3_3.gif)
![[IM Output]](../static/img/crop/montage-3_4.gif)
![[IM Output]](../static/img/crop/edged.gif)
![[IM Output]](../static/img/crop/edged+6_0.gif)
![[IM Output]](../static/img/crop/edged+6_1.gif)
![[IM Output]](../static/img/crop/edged+6_2.gif)
![[IM Output]](../static/img/crop/edged+6_3.gif)
![[IM Output]](../static/img/crop/edged+6_4.gif)
![[IM Output]](../static/img/crop/edged-6_0.gif)
![[IM Output]](../static/img/crop/edged-6_1.gif)
![[IM Output]](../static/img/crop/edged-6_2.gif)
![[IM Output]](../static/img/crop/edged-6_3.gif)
![[IM Output]](../static/img/crop/edged-6_4.gif)
![[IM Output]](../static/img/crop/edged-8_0.gif)
![[IM Output]](../static/img/crop/edged-8_1.gif)
![[IM Output]](../static/img/crop/edged-8_2.gif)
![[IM Output]](../static/img/crop/edged-8_3.gif)
![[IM Output]](../static/img/crop/edged-8_4.gif)
![[IM Output]](../static/img/crop/tile-shave.gif)
![[IM Output]](../static/img/crop/spaced.gif)
![[IM Output]](../static/img/crop/spaced+6_0.gif)
![[IM Output]](../static/img/crop/spaced+6_1.gif)
![[IM Output]](../static/img/crop/spaced+6_2.gif)
![[IM Output]](../static/img/crop/spaced+6_3.gif)
![[IM Output]](../static/img/crop/spaced+6_4.gif)
![[IM Output]](../static/img/crop/spaced-6_0.gif)
![[IM Output]](../static/img/crop/spaced-6_1.gif)
![[IM Output]](../static/img/crop/spaced-6_2.gif)
![[IM Output]](../static/img/crop/spaced-6_3.gif)
![[IM Output]](../static/img/crop/spaced-6_4.gif)
![[IM Output]](../static/img/crop/border_default.gif)
![[IM Output]](../static/img/crop/border_sides.gif)
![[IM Output]](../static/img/crop/border_topbot.gif)
![[IM Output]](../static/img/crop/border_none.gif)
![[IM Output]](../static/img/images/star.gif)
![[IM Output]](../static/img/crop/star_background.gif)
![[IM Output]](../static/img/crop/border_compose.jpg)
![[IM Output]](../static/img/crop/paged_border.gif)
![[IM Output]](../static/img/crop/frame.gif)
![[IM Output]](../static/img/crop/frame_wierd.gif)
![[IM Output]](../static/img/crop/frame_blue.gif)
![[IM Output]](../static/img/crop/frame_red.gif)
![[IM Output]](../static/img/crop/frame_rasied.gif)
![[IM Output]](../static/img/crop/frame_rasied_part.gif)
![[IM Output]](../static/img/crop/frame_sunken_part.gif)
![[IM Output]](../static/img/crop/frame_sunken.gif)
![[IM Output]](../static/img/crop/frame_normal.gif)
![[IM Output]](../static/img/crop/frame_popped.gif)
![[IM Output]](../static/img/crop/frame_pressed.gif)
![[IM Output]](../static/img/crop/frame_inverted.gif)
![[IM Output]](../static/img/crop/frame_compose.jpg)
![[IM Output]](../static/img/crop/paged_framed.gif)
![[IM Output]](../static/img/crop/shave.gif)
![[IM Output]](../static/img/crop/shave_sides.gif)
![[IM Output]](../static/img/crop/shave_topbot.gif)
![[IM Output]](../static/img/crop/paged_frame.gif)
![[IM Output]](../static/img/crop/paged_shave.gif)
![[IM Output]](../static/img/crop/paged_tile_shave.gif)
![[IM Output]](../static/img/crop/extent_enlarge.gif)
![[IM Output]](../static/img/crop/extent_shrink.gif)
![[IM Output]](../static/img/crop/extent_wider.gif)
![[IM Output]](../static/img/crop/extent_taller.gif)
![[IM Output]](../static/img/crop/extent_north.gif)
![[IM Output]](../static/img/crop/extent_south.gif)
![[IM Output]](../static/img/crop/extent_east.gif)
![[IM Output]](../static/img/crop/extent_west.gif)
![[IM Output]](../static/img/crop/extent_center.gif)
![[IM Output]](../static/img/crop/extent_center2.gif)
![[IM Output]](../static/img/crop/splice.gif)
![[IM Output]](../static/img/crop/splice_column.gif)
![[IM Output]](../static/img/crop/splice_row.gif)
![[IM Output]](../static/img/crop/splice_topleft.gif)
![[IM Output]](../static/img/crop/splice_top.gif)
![[IM Output]](../static/img/crop/splice_bottom.gif)
![[IM Output]](../static/img/crop/splice_left.gif)
![[IM Output]](../static/img/crop/splice_right.gif)
![[IM Output]](../static/img/crop/splice_botright.gif)
![[IM Output]](../static/img/crop/splice_label.gif)
![[IM Output]](../static/img/crop/splice_chop.gif)
![[IM Output]](../static/img/crop/chop.gif)
![[IM Output]](../static/img/crop/chop_splice.gif)
![[IM Output]](../static/img/crop/chop_top.gif)
![[IM Output]](../static/img/crop/chop_left.gif)
![[IM Output]](../static/img/crop/chop_right.gif)
![[IM Output]](../static/img/crop/chop_bottom.gif)
![[IM Output]](../static/img/crop/crop_edge_top.gif)
![[IM Output]](../static/img/crop/crop_edge_left.gif)
![[IM Output]](../static/img/crop/crop_edge_right.gif)
![[IM Output]](../static/img/crop/crop_edge_bottom.gif)
![[IM Text]](../static/img/crop/trim_info.txt.gif)
![[IM Output]](../static/img/crop/stripes.gif)
![[IM Output]](../static/img/crop/stripes_trimmed.gif)
![[IM Output]](../static/img/crop/stripes_trim_red.gif)
![[IM Output]](../static/img/crop/stripes_trim_red_fix2.gif)
![[IM Text]](../static/img/crop/blur_trim_info.txt.gif)