Risposte:
Questo è spiegato nella documentazione ufficiale di ImageMagick sotto "Taglia la miniatura per adattarla" :
Un'alternativa, piuttosto che riempire l'immagine per adattarla alla dimensione specifica dell'anteprima che vogliamo, è invece tagliare le parti dell'immagine che non si adattano alla dimensione finale.
Ovviamente questo significa che in realtà perdi alcune parti dell'immagine originale, in particolare i bordi dell'immagine, ma il risultato è una miniatura ingrandita della parte centrale dell'immagine. Questo di solito è (ma non sempre) il soggetto principale dell'immagine, quindi è un metodo pratico per la creazione di miniature.
A partire da IM v6.3.8-3 è stato aggiunto il flag di opzione di ridimensionamento speciale '^' per facilitare questa operazione. Ridimensioniamo semplicemente usando questo flag, quindi ritagliamo le parti dell'immagine che traboccano della dimensione desiderata.
E nel contesto di un comando di esempio:
convert -define jpeg:size=200x200 hatching_orig.jpg -thumbnail 100x100^ \
-gravity center -extent 100x100 cut_to_fit.gif
Ignacio si è collegato alla documentazione corretta, tuttavia lo incollerò qui per comodità:
convert -define jpeg:size=200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 thumbnail.jpeg
Allo stesso modo, quanto segue è per GraphicsMagick:
gm convert -size 200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 +profile "*" thumbnail.jpeg
Spiegazione:
-size 200x200
dice al decoder jpeg che abbiamo solo bisogno di questa risoluzione in modo che possa risparmiare memoria e leggere l'immagine sorgente più velocemente-thumbnail 100x100^
ridimensionamento rapido rendendo il lato più corto 100- gravity center
centrare l'operazione successiva-extent 100x100
applica l'immagine a una tela 100x100+profile "*"
non salvare alcun metainfo nel jpeg (riducendo l'immagine risultante)Questo è un modo più semplice per farlo:
Il seguente comando ridimensiona il lato più piccolo a 100 pixel e ritaglia un quadrato di 100x100. È possibile aggiungere un -strip
comando per ridurre le dimensioni del file.
convert original.jpg -resize "100^>" -gravity center \
-crop 100x100+0+0 -strip thumbnail.jpg
A differenza di altri, non sta cercando di risparmiare memoria. Invece, fa quello che vuoi, e non di più. Inoltre, non ingrandirà le immagini.
Sto usando la grafica per generare miniature di dimensioni precise, ma riempio l'immagine con una scacchiera invece di ritagliare la sporgenza.
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
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
Penso che tu stia cercando qualcosa come:
convert -crop 100x100+50+50 input_image.jpg output_image.jpg
dove 100x100
è la dimensione del rettangolo finale e 50x50
la correzione .
convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg
, per maggiori informazioni controlla la risposta di Igancio Vazquez per un esempio o controlla la documentazione
Questo comando ritaglia su un quadrato e quindi ridimensiona a 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
Altre opzioni sono disponibili qui: http://www.imagemagick.org/Usage/thumbnails/#square