История
Обзор того, чего я хочу достичь sh: у меня есть фотографии, которые нужно обрезать и изменить их размер, один раз для просмотра уменьшенных изображений (около 295x195) и один раз для заголовка "" -изображение "в стиле" (около 1400x560). Оригинальные фотографии различаются по размеру, самые большие - около 2440x1600. Это не будет проблемой для решения.
Однако изображение не должно быть обрезано с гравитацией "север" или "центр", а должно иметь определенную центральную позицию, откуда изображение должно быть обрезано. Для этого изображение имеет значения x
и y
, которые представляют центральную точку в процентах; x=50,y=50
будет означать, что точка фокусировки изображения на самом деле находится посередине.
Я искал здесь и на форумах imagemagick, но не смог найти ничего подходящего, кроме «обрезания определенной части изображения». а затем изменить его размер ". Я не уверен, что это можно сделать с помощью одной команды imagemagick или мне нужно вычислить все самостоятельно и создать пустое полотно, поместить на него изображение, переместить и изменить его размер, а затем сбрить все остальное, чтобы добиться этого.
Что я хочу достичь
Мне нужна одна команда imagemagick, чтобы
- взять одно изображение в качестве входных данных
- изменить размер и обрезать его до заданного размера (например, 295x195) с учетом имеющейся у меня точки фокусировки (в процентах или пикселях)
- выведите изображение с заданным размером с точкой фокусировки посередине
Я буду использовать одну команду для каждого изображения и для каждого необходимого размера.
Вот краткая визуализация, которую я сделал в наброске с демонстрационной картинкой в надежде сделать ее более понятной, что я пытаюсь сделать:
Изображение слева - это базовое изображение, на котором я поместил точку фокусировки в 282 282. Справа - желаемый урожай, который я хочу в размерах 295x195px (без линий, они просто для демонстрации проблемы). Как вы можете видеть, обрезка имеет центральную точку, где точка фокусировки на исходном изображении имеет вид.
Что я пробовал
Моя первая попытка была поиграться со значениями смещения для -crop
чтобы установить точку фокусировки изображения:
convert photo.jpg -resize 1440x560^ -crop "1440x560+25%+25%" result.jpg
Но я быстро понял, что это не так, поскольку это приводит к тому, что изображения слишком малы (когда координаты находятся, например, в левом нижнем углу изображение) и вообще обрезает части изображения, которые были бы видны с точкой фокусировки, что имеет смысл после прочтения об этом в документах.
Затем я увидел вариант -region
и попытался воспроизвести с размером изображения 2400x1600 и различными порезами на моем изображении:
convert photo.jpg -region 610x400 -resize 1440x560^ -crop 1440x560+0+0 result.jpg
Единственный эффект опции региона заключается в том, что я получаю один и тот же срез изображения независимо от того, какие значения я добавляю и всегда накладывает искаженные белые горизонтальные полосы на изображение.
Любые подсказки в правильном направлении (с примерами кода или без них) были бы полезны, поэтому я знаю, где копать глубже.
Среда
- macOS Catalina для Разработка
- Приложение, содержащее код, будет работать на Debian Buster
- Локальная версия imagemagick - 7.0.8-66
- Версия сервера imagemagick - 6.9.10-23 (я могу обновить это с ручной сборкой, хотя, было бы хорошо иметь решение, которое работает только в IM7)