В чем разница для операторов сэмплирования / ресэмплирования / масштабирования / изменения размера / адаптивного изменения размера / эскиза в ImageMagick convert? - PullRequest
82 голосов
/ 15 декабря 2011

Я нашел несколько способов изменить разрешение изображения, используя convert:

-sample
-resample
-scale
-resize
-adaptive-resize
-thumbnail

В чем их разница?

Если мне нужно сделать уменьшенное изображение большого размера с фиксированным соотношением сторон (требуется обрезка) - какой мой лучший выбор?

Ответы [ 2 ]

128 голосов
/ 26 октября 2012

изменить размер

-resize 400x300+20+30 (как в примерах -scale и -sample ниже) преобразует входные данные в выходное изображение с пиксельными размерами 400x300. Он также смещает вывод на 20 пикселей вправо и на 30 пикселей вниз. Кроме того, есть еще несколько отличий от -scale:

  • -resize поддерживает дополнительную настройку -filter (которая должна произойти в командной строке до с использованием -resize!).

  • -filter определяет точный алгоритм, который будет использоваться для цветов добавленных пикселей в случае увеличения или для цветов, которые будут использоваться для оставшихся пикселей, когда некоторые из их соседей удаляются в случае минимизации .

  • Чтобы получить список поддерживаемых фильтров, просто запустите convert -list filter.

  • -filter point -resize 400x300 создает точно такой же результат, что и -sample 400x300, но работает все еще немного медленнее.

  • Если не установить рядом с (до) -resize, преобразование будет по умолчанию молча -filter Lanczos, что медленнее, но генерирует намного лучшее качество (поскольку учитывает цвета всех окружающих пикселей для все новые добавленные), которые создает -filter point (для определения цвета вновь добавленных пикселей используется правило ближайший сосед ).

образец

-sample 400x300 преобразует входное изображение в выходные изображения, которые имеют размеры в пикселях 400x300. Однако есть несколько очень важных отличий от -resize:

  • -sample не поддерживает дополнительную настройку -filter; в любом случае, -filter просто игнорируется.

  • При увеличении (поскольку размер входного изображения может быть меньше 400x300), пиксели реплицируются в блоках.

  • При минимизации (поскольку размер входного изображения может превышать 400x300), пиксели подвергаются выборке с помощью очень простого алгоритма: некоторые строки и столбцы просто пропускаются.

  • Аргумент geometry для -sample не поддерживает какую-либо часть offset (в отличие от -resize, которая учитывает директивы offset для выход).

  • На выходе никогда не будет больше (разных) цветов, чем на входном изображении; хотя может иметь меньше цветов.

  • Поэтому -sample очень быстро (быстрее, чем -resize) - но качество вывода (как правило) хуже: вы можете легко получить экстремальные блокировки и псевдонимы эффекты в результирующем выводе.

  • Одна важная особенность -sample заключается в том, что новое изображение не будет содержать никаких новых цветов, хотя некоторые цвета из исходного изображения могут исчезнуть.

повторная выборка

-resample использует в качестве параметра желаемое XxY разрешение , а не XxY пиксель геометрия от целевого изображения. Цель этого оператора - сохранить размер изображения . Предположим, ваше изображение имеет размеры 4 дюйма на 3 дюйма на устройстве, которое отображает его с разрешением 300 DPI. Затем запрос -resample 72 или -resample 72x72 изменит размер изображения так, чтобы оно (снова) имело размеры 4 дюйма на 3 дюйма на устройстве с разрешением 72 DPI.

  • Эта операция работает только для тех изображений, у которых уже есть желаемое разрешение, сохраненное в их метаданных (не все форматы изображения поддерживают концепцию разрешения изображения - JPEG, PNG и TIFF).

  • Если исходное изображение имеет формат, в котором отсутствует внутренняя поддержка разрешения изображения, то (предполагаемое) исходное разрешение изображения должно быть указано с помощью -density в командной строке prior для указания разрешения -resample.

шкала

-scale 400x300 дает эквивалентный результат (но быстрее, потому что он избегает всей обработки фильтра), как и при использовании -filter box -resize 400x300.Он также полностью игнорирует любую текущую настройку -filter.

  • При минимизации он изменяет размер изображения, просто заменяя цвета пикселей путем усреднения соответствующих входных цветов пикселей вместе.

  • При увеличении просто реплицирует соответствующие входные пиксели для необходимых дополнительных пикселей.

adaptive-resize

-adaptive-resize 400x300 не поддерживает (или игнорирует, если установлено) часть offset части параметра geometry , а также игнорирует -gravity настройка, если присутствует.

миниатюра

-thumbnail работает так же, как -resize, с несколькимиразличия:

  • Оптимизирован для скорости.

  • Это всепоэтому удаляет все встроенные цветовые профили, чтобы уменьшить размер файлов миниатюр.


Следующий ответ показывает несколько (иллюстрированных!) примеров директивы -resize.Каждая иллюстрация показывает различный результат, в зависимости от «мелких деталей» точного метода изменения размера:

1 голос
/ 01 марта 2019

Как сказал Сиро Сантилли:

Если бы у вас были образцы изображений, это было бы еще лучше: -)

- размер

google play with -resize (8,0 кБ)

- образец

-sample (2,2 кБ)

- масштаб

-scale (7,0 кБ)

-adaptive-resize

enter image description here (4,3 кБ)

...