Miniaturas quadradas com o ImageMagick (converter)?

32

Como criar miniaturas quadradas / cortadas usando o ImageMagick? Cortar como abaixo.

colheita

marioosh
fonte

Respostas:

19

Isso é explicado na documentação oficial do ImageMagick em "Cortar a miniatura para caber" :

Uma alternativa, em vez de preencher a imagem para caber no tamanho de miniatura específico que queremos, é cortar as partes da imagem que não se encaixam no tamanho final.

Obviamente, isso significa que você realmente perde algumas partes da imagem original, principalmente as bordas da imagem, mas o resultado é uma miniatura ampliada da parte central da imagem. Este é geralmente (mas nem sempre) o assunto principal da imagem, por isso é um método prático de criação de miniaturas.

A partir da IM v6.3.8-3, o sinalizador de opção de redimensionamento especial '^' foi adicionado para facilitar isso. Nós apenas redimensionamos usando esse sinalizador e recortamos as partes da imagem que ultrapassam o tamanho desejado.

E no contexto de um comando de exemplo:

convert -define jpeg:size=200x200 hatching_orig.jpg  -thumbnail 100x100^ \
          -gravity center -extent 100x100  cut_to_fit.gif
Ignacio Vazquez-Abrams
fonte
7
Possivelmente ... algum tipo de descrição?
Hello71
Eu amo as respostas à queima-roupa de Ignacio :-)
Ciro Santilli resolveu
55

Ignacio vinculado à documentação correta, no entanto, eu vou colá-lo em linha aqui por conveniência:

convert -define jpeg:size=200x200 original.jpeg  -thumbnail 100x100^ -gravity center -extent 100x100  thumbnail.jpeg

Da mesma forma, o seguinte é para GraphicsMagick:

gm convert -size 200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 +profile "*" thumbnail.jpeg

Explicação:

  • -size 200x200 informa ao decodificador jpeg que precisamos apenas dessa resolução para economizar memória e ler a imagem de origem mais rapidamente
  • -thumbnail 100x100^ redimensionamento rápido, tornando o lado mais curto 100
  • - gravity center centralize a próxima operação
  • -extent 100x100 aplicar a imagem a uma tela 100x100
  • +profile "*" não salve nenhum metainfo no jpeg (diminuindo a imagem resultante)
Jonah Braun
fonte
3
Quando eu usei na linha de comando (gráficos magick one), consegui uma imagem no centro, duas laterais estão preenchidas com branco. Não é o descrito em questão. Estou fazendo algo errado?
Umut Benzer
2
Se você estiver usando o Windows, deverá dobrar o caractere ^ para escapar dele. Por exemplo: -thumbnail 100x100 ^^
George Filippakos
3
Por que não tamanho 100x100?
Olá Mundo
@ HelloWorld: Leia "Imagemagick Geometry". Google, será fácil encontrar.
precisa saber é o seguinte
11

Essa é uma maneira mais simples de fazer isso:

O comando a seguir redimensiona o lado menor para 100 pixels e corta um quadrado de 100x100. Você pode adicionar um -stripcomando para reduzir o tamanho do arquivo.

convert original.jpg -resize "100^>" -gravity center \ 
                     -crop 100x100+0+0 -strip thumbnail.jpg

Ao contrário de outros, não está tentando economizar memória. Em vez disso, faz o que você quer, e não mais. Além disso, ele não melhora as imagens.

Reinaldo Guedes
fonte
Ao adicionar uma resposta tardia a uma pergunta com respostas estabelecidas, é útil fornecer explicações suficientes por que sua resposta oferece algo único e novo em comparação com as outras respostas.
Jason Aller
2
Obrigado, não sei por que os outros complicaram demais suas respostas para tentar economizar memória quando o OP não menciona nada sobre isso.
confused00
2

Estou usando a graphicsmagick para gerar miniaturas de tamanho preciso, mas preenchendo a imagem com um tabuleiro de damas em vez de cortar a saliência.

gm convert -limit Threads 1 -size 320x180 pattern:checkerboard -background transparent -gravity center -resize 320x180 -extent 320x180 original.jpg -flatten -resize 112x65! -interlace Line 1 thumb_112x65.jpg

Opções explicadas.

gm convert

// Single threaded seems faster on smaller files
-limit Threads 1 

// Generate a checkerboard of size 320x180.
// Sets the relative size of the checkerboard squares,
// also sets the desired aspect ratio. In my case (16:9)
-size 320x180 pattern:checkerboard 

// Resize the input image and center it on a transparent layer.
-background transparent -gravity center -resize 320x180 -extent 320x180 orig.jpg

// Merge the layers
-flatten 

// Resize the output to the desired
// The ! causes the aspect ratio to be ignored, fixing any rounding errors.
// (Specify a size with the same aspect ratio as the checkerboard.)
-resize 112x65! 

// Use Progressive JPEG Encoding
-interlace Line 

// Output Image
thumb_112x65.jpg
Ryan Williams
fonte
1

Eu acho que você está procurando algo como:

convert -crop 100x100+50+50 input_image.jpg output_image.jpg 

onde 100x100é o tamanho do retângulo final e 50x50o deslocamento .

pconcepcion
fonte
Essa imagem de recorte, mas não produz miniaturas.
Marioosh 26/04
1
@marioosh: Eu não entendido, você pode usar convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg, para mais informações verificação de resposta Ignacio Vazquez para um exemplo ou verificar a documentação
pconcepcion
1

Esse comando é cortado em um quadrado e redimensionado para 150x150

convert 824-full.jpg -set option:size '%[fx:min(w,h)]x%[fx:min(w,h)]' xc:none +swap -gravity center -composite -resize 150x150  temp.jpg

Mais opções estão disponíveis aqui: http://www.imagemagick.org/Usage/thumbnails/#square

michaelbn
fonte