Ответы:
Это объясняется в официальной документации ImageMagick под заголовком «Вырежьте миниатюру до нужного размера» :
Альтернатива, вместо того, чтобы раскладывать изображение, чтобы оно соответствовало требуемому размеру миниатюры, состоит в том, чтобы вместо этого отрезать части изображения, которые не соответствуют окончательному размеру.
Конечно, это означает, что вы на самом деле теряете некоторые части исходного изображения, особенно края изображения, но в результате вы получаете увеличенный эскиз центральной части изображения. Это обычно (но не всегда) основной предмет изображения, поэтому это практичный метод создания миниатюр.
Начиная с IM v6.3.8-3 был добавлен специальный флаг опции изменения размера '^', чтобы сделать это проще. Мы просто изменяем размеры, используя этот флаг, затем обрезаем части изображения, которые переполняют желаемый размер.
И в контексте примера команды:
convert -define jpeg:size=200x200 hatching_orig.jpg -thumbnail 100x100^ \
-gravity center -extent 100x100 cut_to_fit.gif
Ignacio ссылается на правильную документацию, однако для удобства я вставлю ее здесь:
convert -define jpeg:size=200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 thumbnail.jpeg
Аналогично, следующее для GraphicsMagick:
gm convert -size 200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 +profile "*" thumbnail.jpeg
Объяснение:
-size 200x200
говорит декодеру jpeg, что нам нужно только это разрешение, чтобы оно могло экономить память и быстрее читать исходное изображение-thumbnail 100x100^
быстрое изменение размера делает самую короткую сторону 100- gravity center
центрировать следующую операцию-extent 100x100
применить изображение к холсту 100x100+profile "*"
не сохраняйте метаинфо в jpeg (уменьшая полученное изображение)Это более простой способ сделать это:
Следующая команда изменяет размер меньшей стороны до 100 пикселей и обрезает квадрат 100x100. Вы можете добавить -strip
команду, чтобы уменьшить размер файла.
convert original.jpg -resize "100^>" -gravity center \
-crop 100x100+0+0 -strip thumbnail.jpg
В отличие от других, он не пытается сохранить память. Вместо этого он делает то, что вы хотите, и не более. Плюс, это не улучшит изображения.
Я использую graphicsmagick для создания миниатюр точного размера, но вместо обрезки выступа я добавляю изображение в шахматную доску.
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
Я думаю, что вы ищете что-то вроде:
convert -crop 100x100+50+50 input_image.jpg output_image.jpg
где 100x100
есть размер конечного прямоугольника и смещения .50x50
convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg
, для получения дополнительной информации проверьте ответ Игансио Васкеса для примера или проверьте документацию
Эта команда обрезать до квадрата, а затем изменить размер до 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
Дополнительные параметры доступны здесь: http://www.imagemagick.org/Usage/thumbnails/#square