Respuestas:
Esto se explica en la documentación oficial de ImageMagick en "Cortar la miniatura para ajustar" :
Una alternativa, en lugar de rellenar la imagen para que se ajuste al tamaño de miniatura específico que queremos, es cortar las partes de la imagen que no se ajustan al tamaño final.
Por supuesto, esto significa que realmente pierde algunas partes de la imagen original, particularmente los bordes de la imagen, pero el resultado es una miniatura ampliada de la parte central de la imagen. Este es generalmente (pero no siempre) el tema principal de la imagen, por lo que es un método práctico de creación de miniaturas.
A partir de IM v6.3.8-3, se agregó el indicador de opción de cambio de tamaño especial '^' para facilitar esto. Simplemente cambiamos el tamaño usando esta bandera y luego recortamos las partes de la imagen que desbordan el tamaño deseado.
Y en el contexto de un comando de ejemplo:
convert -define jpeg:size=200x200 hatching_orig.jpg -thumbnail 100x100^ \
-gravity center -extent 100x100 cut_to_fit.gif
Ignacio se vinculó a la documentación correcta, sin embargo, la pegaré en línea aquí por conveniencia:
convert -define jpeg:size=200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 thumbnail.jpeg
Del mismo modo, lo siguiente es para GraphicsMagick:
gm convert -size 200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 +profile "*" thumbnail.jpeg
Explicación:
-size 200x200
le dice al decodificador jpeg que solo necesitamos esta resolución para que pueda ahorrar memoria y leer la imagen fuente más rápido-thumbnail 100x100^
cambio de tamaño rápido haciendo el lado más corto 100- gravity center
centrar la próxima operación-extent 100x100
aplicar la imagen a un lienzo de 100x100+profile "*"
no guarde ninguna metainformación en el JPEG (haciendo que la imagen resultante sea más pequeña)Esa es una manera más simple de hacerlo:
El siguiente comando cambia el tamaño del lado más pequeño a 100 píxeles y recorta un cuadrado de 100x100. Puede agregar un -strip
comando para reducir el tamaño del archivo.
convert original.jpg -resize "100^>" -gravity center \
-crop 100x100+0+0 -strip thumbnail.jpg
A diferencia de otros, no está tratando de ahorrar memoria. En cambio, hace lo que quieres, y no más. Además, no aumentará las imágenes.
Estoy usando graphicsmagick para generar miniaturas de tamaño preciso, pero estoy rellenando la imagen con un tablero de ajedrez en lugar de recortar el saliente.
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
Creo que estás buscando algo como:
convert -crop 100x100+50+50 input_image.jpg output_image.jpg
donde 100x100
es el tamaño del rectángulo final y 50x50
el desplazamiento .
convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg
, para obtener más información, verifique la respuesta de Igancio Vázquez como ejemplo o consulte la documentación
Este comando recorta a un cuadrado y luego cambia el tamaño 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
Aquí hay más opciones disponibles: http://www.imagemagick.org/Usage/thumbnails/#square