Квадратные миниатюры с помощью ImageMagick (конвертировать)?

24559
marioosh

Как создать квадратный / обрезанный эскиз с помощью ImageMagick? Обрезка как ниже.

cropping

28

6 ответов на вопрос

47
Jonah Braun

Игнасио ссылается на правильную документацию, однако для удобства я вставлю ее здесь:

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 (уменьшая полученное изображение)
Когда я использовал его в командной строке (графическая магия один), я получил изображение в центре, два боковых элемента заполнены белым. Не тот, который описан в вопросе. Я делаю что-то неправильно? Umut Benzer 12 лет назад 3
Если вы используете Windows, вы должны удвоить символ ^, чтобы избежать его. Например: - миниатюра 100х100 ^^ George Filippakos 11 лет назад 2
Почему бы не размер 100x100? Hello World 10 лет назад 3
@HelloWorld: Read "Imagemagick Geometry". Google it, it will be easy find. saurabheights 7 лет назад 0
16
Ignacio Vazquez-Abrams

Это объясняется в официальной документации ImageMagick под заголовком «Вырежьте миниатюру до нужного размера» :

Альтернатива, вместо того, чтобы раскладывать изображение, чтобы оно соответствовало требуемому размеру миниатюры, состоит в том, чтобы вместо этого отрезать части изображения, которые не соответствуют окончательному размеру.

Конечно, это означает, что вы на самом деле теряете некоторые части исходного изображения, в частности края изображения, но в результате вы получаете увеличенный эскиз центральной части изображения. Обычно это (но не всегда) основной предмет изображения, поэтому это практичный метод создания миниатюр.

Начиная с IM v6.3.8-3 был добавлен специальный флаг опции изменения размера '^', чтобы сделать это проще. Мы просто изменяем размер, используя этот флаг, затем обрезаем части изображения, которые выходят за пределы желаемого размера.

И в контексте примера команды:

convert -define jpeg:size=200x200 hatching_orig.jpg -thumbnail 100x100^ \ -gravity center -extent 100x100 cut_to_fit.gif 
Возможно ... какой-то тип описания? Hello71 13 лет назад 7
Я люблю откровенные ответы Игнасио :-) Ciro Santilli 新疆改造中心 六四事件 法轮功 7 лет назад 0
9
Reinaldo Guedes

Это более простой способ сделать это:

Следующая команда изменяет размер меньшей стороны до 100 пикселей и обрезает квадрат 100x100. Вы можете добавить -stripкоманду, чтобы уменьшить размер файла.

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

В отличие от других, он не пытается сохранить память. Вместо этого он делает то, что вы хотите, и не более. Плюс, это не улучшит изображения.

При добавлении позднего ответа на вопрос с устоявшимися ответами полезно предоставить достаточно объяснений, почему ваш ответ предлагает нечто уникальное и новое по сравнению с другими ответами. Jason Aller 10 лет назад 0
Спасибо, я не знаю, почему другие слишком усложняли свои ответы, пытаясь сохранить память, когда ОП вообще ничего не упоминает об этом. confused00 8 лет назад 1
2
Ryan Williams

Я использую 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 
1
pconcepcion

Я думаю, что вы ищете что-то вроде:

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

где 100x100есть размер конечного прямоугольника и смещения .50x50

Это обрезать изображение, но не делает миниатюру. marioosh 13 лет назад 0
@marioosh: я не понял, вы можете использовать `convert -thumbnail 100x100 + 50 + 50 input_image.jpg output_image.jpg`, для получения дополнительной информации проверьте ответ Игансио Васкеса для примера или проверьте [документацию] (http: // www.imagemagick.org/script/command-line-options.php#thumbnail) pconcepcion 13 лет назад 1
1
michaelbn

This command crop to a square and then resize to 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 

More options are availble here: http://www.imagemagick.org/Usage/thumbnails/#square