Как изменить размер холста PNG с помощью ImageMagick (GraphicsMagick)? (Как дополнить прозрачностью?)

Альтернативный вариант: как взять неквадратный PNG и "заполнить" "остаток" изображения прозрачностью, чтобы полученное квадратное изображение имело исходное изображение по центру квадрата?

В конечном счете, я хочу взять любое изображение любого формата, поддерживаемого GM, любого размера и создать уменьшенный PNG (скажем, максимум 40 пикселей для любого измерения), с сохранением соотношения сторон, с прозрачностью для неквадратного исходные изображения И с уже подготовленной маской прозрачности PNG 40x40.

Я уже знаю, как уменьшить и сохранить соотношение сторон; У меня уже есть команда для применения моего композита. Моя единственная недостающая часть - это квадратичные неквадратные изображения (заполнение с прозрачностью).

Отдельная команда предпочтительна; многокомандная цепочка приемлема.

(редактировать)

Дополнительная информация: Вот составная команда, которую я использую:

gm composite -compose copyopacity mask.png source-and-target.png source-and-target.png

где mask.png имеет белые пиксели для того, что я хочу сохранить от source-and-target.png, и прозрачные пиксели для того, что я хочу удалить (и стать прозрачным) из source-and-target.png.

3 ответа

Решение

Эта команда возьмет любой размер файла ввода и поместит его наилучшим образом в квадрат 40x40 и площадку с прозрачностью:

convert \
   original.png \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
  -compose Copy_Opacity \
  -composite mask.png \
   original-resized.png

gravity опция обеспечивает центрирование изображения в обоих направлениях и transparent используется везде, где нет пикселей. Затем композитинг делается с mask.png

Одна команда для преобразования всех PNG из одной папки:

mogrify \
 -resize 50x50 \
 -background transparent \
 -gravity center \
 -extent 50x50 \
 -format png \
 -path resized \
 *.png

mogrify - это команда из пакета ImageMagick. Сначала вы должны создать выходной каталог.

Вот то, что я в конце концов пошел с. Двухэтапный процесс:

gm convert \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
   original.png \
   intermediate.png

gm composite \
  -compose in \
   intermediate.png \
   mask.png \
   out.png

Где mask.png - это белые пиксели для того, что я хотел сохранить, и прозрачные пиксели для того, что я хотел замаскировать (отбросить).

Другие вопросы по тегам