Как создать квадратный / обрезанный эскиз с помощью ImageMagick? Обрезка как ниже.
6 ответов
Игнасио ссылается на правильную документацию, однако для удобства я вставлю ее здесь:
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 (уменьшая результирующее изображение)
Это объясняется в официальной документации ImageMagick под заголовком «Вырежьте миниатюру до нужного размера»:
Альтернатива, вместо того, чтобы раскладывать изображение, чтобы оно соответствовало требуемому размеру миниатюры, это вместо этого отрезать части изображения, которые не соответствуют окончательному размеру.
Конечно, это означает, что вы на самом деле теряете некоторые части исходного изображения, в частности края изображения, но в результате вы получаете увеличенный эскиз центральной части изображения. Обычно это (но не всегда) основной предмет изображения, поэтому это практичный метод создания миниатюр.
Начиная с IM v6.3.8-3 был добавлен специальный флаг опции изменения размера '^', чтобы сделать это проще. Мы просто изменяем размер, используя этот флаг, затем обрезаем части изображения, которые выходят за пределы желаемого размера.
И в контексте примера команды:
convert -define jpeg:size=200x200 hatching_orig.jpg -thumbnail 100x100^ \
-gravity center -extent 100x100 cut_to_fit.gif
Это более простой способ сделать это:
Следующая команда изменяет размер меньшей стороны до 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
- смещение.
Эта команда обрезать до квадрата, а затем изменить размер до 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