Vignettes carrées avec ImageMagick (convertir)?


Réponses:


19

Ceci est expliqué dans la documentation officielle d'ImageMagick sous «Couper la vignette pour l'adapter» :

Une alternative, plutôt que de masquer l'image pour l'adapter à la taille de vignette spécifique que nous voulons, consiste à couper les parties de l'image qui ne correspondent pas à la taille finale.

Bien sûr, cela signifie que vous perdez en fait certaines parties de l'image d'origine, en particulier les bords de l'image, mais le résultat est une miniature agrandie de la partie centrale de l'image. C'est généralement (mais pas toujours) le sujet principal de l'image, c'est donc une méthode pratique de création de vignettes.

À partir d'IM v6.3.8-3, l'indicateur d'option de redimensionnement spécial '^' a été ajouté pour faciliter les choses. Nous redimensionnons simplement en utilisant ce drapeau, puis recadrons les parties de l'image qui débordent de la taille souhaitée.

Et dans le cadre d'un exemple de commande:

convert -define jpeg:size=200x200 hatching_orig.jpg  -thumbnail 100x100^ \
          -gravity center -extent 100x100  cut_to_fit.gif

7
Peut-être ... un type de description?
Hello71

J'adore les réponses à blanc d'Ignacio :-)
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

55

Ignacio lié à la documentation correcte, mais je vais la coller en ligne ici pour plus de commodité:

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

De même, ce qui suit est pour GraphicsMagick:

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

Explication:

  • -size 200x200 indique au décodeur jpeg que nous n'avons besoin que de cette résolution pour économiser de la mémoire et lire l'image source plus rapidement
  • -thumbnail 100x100^ redimensionnement rapide faisant le côté le plus court 100
  • - gravity center centrer la prochaine opération
  • -extent 100x100 appliquer l'image à une toile 100x100
  • +profile "*" n'enregistrez pas de métainfo dans le jpeg (ce qui rend l'image résultante plus petite)

3
Quand je l'ai utilisé en ligne de commande (graphiques magick one), j'ai eu l'image au centre, deux côtés sont remplis de blanc. Pas celui décrit en question. Est-ce que je fais quelque chose de mal?
Umut Benzer

2
Si vous utilisez des fenêtres, vous devez doubler le caractère ^ pour y échapper. Par exemple: -thumbnail 100x100 ^^
George Filippakos

3
Pourquoi ne pas mesurer 100x100?
Hello World

@HelloWorld: Lisez "Imagemagick Geometry". Google, ce sera facile à trouver.
saurabheights

11

C'est une façon plus simple de le faire:

La commande suivante redimensionne le petit côté à 100 pixels et recadre un carré de 100 x 100. Vous pouvez ajouter une -stripcommande pour réduire la taille du fichier.

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

Contrairement à d'autres, il n'essaie pas d'économiser de la mémoire. Au lieu de cela, il fait ce que vous voulez, et pas plus. De plus, il n'améliorera pas les images.


Lorsque vous ajoutez une réponse tardive à une question avec des réponses établies, il est utile de fournir suffisamment d'explications pour expliquer pourquoi votre réponse offre quelque chose d'unique et de nouveau par rapport aux autres réponses.
Jason Aller

2
Merci, je ne sais pas pourquoi les autres ont trop compliqué leurs réponses pour essayer d'économiser de la mémoire quand OP ne mentionne rien du tout à ce sujet.
confused00

2

J'utilise graphicsmagick pour générer des vignettes de taille précise, mais je remplis l'image avec un damier au lieu de recadrer le surplomb.

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

Explication des options.

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

1

Je pense que vous cherchez quelque chose comme:

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

100x100est la taille du rectangle final et 50x50le décalage .


Cette image recadrée, mais ne fait pas de vignette.
marioosh

1
@marioosh: Je n'ai pas compris, vous pouvez utiliser convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg, pour plus d'informations, consultez la réponse d'Igancio Vazquez pour un exemple ou consultez la documentation
pconcepcion

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.