Изменение размера изображений в стиле Facebook с помощью ImageMagick

Я хотел бы изменить размер (уменьшить) некоторых изображений так, как это делает Facebook. ImageMagick, но я открыт для предложений :)

Я считаю, что Facebook делает это:

Допустим, у вас есть максимальная ширина x высота 250x200, Facebook оптимизирует использование этого. Пытается использовать как можно больше размером 250x200. Если, например, вы уменьшите масштаб изображения и получите 220x200, тогда они будут вырезать сверху и снизу изображения, пока не будут использовать как можно больше кадра 250x200. На самом деле я думаю, что они берут больше снизу, чем сверху (около 1: 2,5), что, как я считаю, связано с тем, что у большинства изображений голова вверху, и Facebook это понимает.

Есть ли какое-нибудь название для такого алгоритма изменения размера? И есть ли способ заставить ImageMagick сделать это?

Заранее спасибо!

Изменить. На самом деле похоже, что Facebook все-таки не использует эту «умную» технику изменения размера. Они просто изменяют размер там, где у них есть минимальная ширина / минимальная высота. Затем, когда они показывают изображение в своем альбоме, они обрезают его сверху / снизу или слева / справа, чтобы использовать как можно больше для кадра (по крайней мере, так я это воспринимаю).

-Тобиас


person freeall    schedule 19.10.2010    source источник
comment
какой язык вы используете? в зависимости от того, есть много полезных библиотек для такого рода вещей.   -  person fish2000    schedule 20.10.2010
comment
Серверный JavaScript. Но кажется, что ImageMagick - хороший вариант.   -  person freeall    schedule 20.10.2010
comment
Facebook предлагает вам выбрать, где находится ваше лицо, а затем просто изменить размер.   -  person erjiang    schedule 20.10.2010


Ответы (1)


Вы можете использовать ImageMagick, чтобы получить размеры изображения, масштабировать, а затем обрезать его. Что касается того, точно ли вы описываете алгоритм, который использует Facebook, я не знаю.

Я думаю, что следующая ссылка решает проблему, которую вы пытаетесь решить:

http://www.imagemagick.org/Usage/resize/#space_fill

В самом конце они приводят пример ...

convert logo: \
      -resize 160x -resize 'x160<'   -resize 50% \
      -gravity center  -crop 80x80+0+0 +repage   space_fill_2.jpg

Эта команда изменяет размер изображения до 160 пикселей в ширину, до 160 пикселей в высоту, берет большее из двух изображений с измененным размером, сжимает его вдвое и обрезает до 80x80.

Вам может быть интересно следующее:

http://www.google.com/search?q=image+entroy+cropping

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

Еще одна связанная ссылка -

Django, заголовок кадрирования с помощью sorl-эскиза

правки: добавлены ссылки по теме, указан пример команды для выполнения аналогичной задачи со ссылкой на источник примера.

person EMPraptor    schedule 19.10.2010
comment
Я в основном искал единственную команду, чтобы сделать это, поэтому я мог делать это на лету, используя только потоки. Чтобы заставить ImageMagick изменить размер, но заполнить как можно больше ограничивающего прямоугольника, я его даю. - person freeall; 20.10.2010
comment
Я не знаю такой команды и не знаю, зачем они включают такую ​​команду. ImageMagick должен выполнять общую обработку изображений. Его цель не в том, чтобы реализовать все возможные манипуляции с изображениями. Возможно, вы могли бы использовать библиотеку ImageMagic или какую-либо другую библиотеку для работы с изображениями, чтобы создать инструмент для выполнения этой конкретной задачи. - person EMPraptor; 20.10.2010