web-dev-qa-db-fra.com

Des vignettes carrées avec ImageMagick (convertir)?

Comment créer une miniature carrée/recadrée en utilisant ImageMagick? Recadrage comme ci-dessous.

cropping

30
marioosh

Ceci est expliqué dans la documentation officielle d'ImageMagick sous, "Couper la vignette pour l'ajuster" :

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

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

À partir de la version 6.3.8-3 d'IM, l'indicateur d'option de redimensionnement spécial '^' a été ajouté pour faciliter cette opération. Nous venons de redimensionner en utilisant cet indicateur, puis rogner les parties de l'image qui débordent de la taille souhaitée.

Et dans le contexte d'un exemple de commande:

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

Ignacio a lié à la bonne documentation, mais je vais la coller ici pour plus de commodité:

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

De même, voici ce qui suit 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 plus rapidement l'image source
  • -thumbnail 100x100^ redimensionnement rapide faisant le côté le plus court 100
  • - gravity center centrer l'opération suivante
  • -extent 100x100 applique l'image à un canevas 100x100
  • +profile "*" n'enregistrez pas de métainfo au format jpeg (ce qui rend l'image résultante plus petite)
52
Jonah Braun

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

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

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

Contrairement aux autres, il ne s'agit pas d'économiser de la mémoire. Au lieu de cela, il fait ce que vous voulez, et pas plus. De plus, il ne sera pas des images haut de gamme.

11
Reinaldo Guedes

J'utilise graphicsmagick pour générer des vignettes de taille précise, mais je colore l'image avec un damier au lieu de rogner 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

Options expliquées.

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
2
Ryan Williams

Je pense que vous cherchez quelque chose comme:

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

100x100 est le taille du rectangle final et 50x50 le offset.

1
pconcepcion

Cette commande recadre à un carré et redimensionne ensuite à 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

Plus d'options sont disponibles ici: http://www.imagemagick.org/Usage/thumbnails/#square

1
michaelbn