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

Ответы:

19

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

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

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

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

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

convert -define jpeg:size=200x200 hatching_orig.jpg  -thumbnail 100x100^ \
          -gravity center -extent 100x100  cut_to_fit.gif
Игнасио Васкес-Абрамс
источник
7
Возможно ... какой-то тип описания?
Hello71
Мне нравятся
откровенные
55

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 (уменьшая полученное изображение)
Иона Браун
источник
3
Когда я использовал его в командной строке (графическая магия один), я получил изображение в центре, два боковых элемента заполнены белым. Не тот, который описан в вопросе. Я делаю что-то неправильно?
Умут Бензер
2
Если вы используете Windows, вы должны удвоить символ ^, чтобы избежать его. Например: - миниатюра 100x100 ^^
Джордж Филиппакос
3
Почему бы не размер 100x100?
Привет, мир,
@HelloWorld: читайте "Геометрия Imagemagick". Google это, это будет легко найти.
saurabheights
11

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

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

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

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

Рейнальдо Гуэдес
источник
При добавлении позднего ответа на вопрос с устоявшимися ответами полезно предоставить достаточно объяснений, почему ваш ответ предлагает нечто уникальное и новое по сравнению с другими ответами.
Джейсон Аллер
2
Спасибо, я не знаю, почему другие слишком усложняли свои ответы, пытаясь сохранить память, когда ОП вообще ничего не упоминает об этом.
confused00
2

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

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

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

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

pconcepcion
источник
Это обрезать изображение, но не делает миниатюру.
marioosh
1
@marioosh: Я не понял, вы можете использовать convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpg, для получения дополнительной информации проверьте ответ Игансио Васкеса для примера или проверьте документацию
pconcepcion
1

Эта команда обрезать до квадрата, а затем изменить размер до 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

michaelbn
источник