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


9

Альтернативный вариант: как взять неквадратный 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.

Ответы:


7

Эта команда возьмет любой входной файл любого размера и поместит его лучше всего в квадрат 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


Так мы не можем сделать это одним выстрелом composite?
Пистос

@Pistos Мне не ясно, что вы делаете с композитом - это просто маска прозрачности, чтобы скрыть / показать части эскиза после изменения размера? Можете ли вы отредактировать и добавить последовательность команд, которая у вас есть, чтобы мы могли увидеть, можно ли ее комбинировать?
Пол

@Pistos Я думаю, что лучший подход - делать композитинг с -convert, а не наоборот. Я обновил свой ответ выше.
Пол

Близко, но не совсем. Ваша команда не работала как есть, и даже с настройками она не работала. Все нормально, я сделаю это в два этапа. Я обновлю вещи здесь после того, как я получу заключительные, рабочие шаги CLI. Еще раз спасибо.
Pistos

Я бы добавил, -filter Catromпрежде чем thumbnailвариант, потому что из моего опыта, как правило, производит изображения более высокого качества.
thdoan

6

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

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

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


Хороший. Кстати, если вы чувствуете себя авантюрным, вы можете не -path resizedредактировать файлы на месте.
aaronk6

Это замечательно. На моей установке (OSX, 1.3.35) это gm mogrifyи вместо этого -path resized, используйте-create-directories -output-directory resized
Блейк

1

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

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 - это белые пиксели для того, что я хотел сохранить, и прозрачные пиксели для того, что я хотел скрыть (отбросить).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.