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

10931
Pistos

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

9

3 ответа на вопрос

7
Paul

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

Так что мы не можем сделать это одним выстрелом с `` `композитным```? Pistos 12 лет назад 0
@Pistos Мне не ясно, что вы делаете с композитом - это просто маска прозрачности, чтобы скрыть / показать части эскиза после изменения размера? Можете ли вы [отредактировать] и добавить последовательность команд, которая у вас есть, чтобы мы могли увидеть, можно ли ее комбинировать? Paul 12 лет назад 0
Готово. Спасибо за вашу помощь. Pistos 12 лет назад 0
@Pistos Я думаю, что лучший подход - делать композитинг с -convert, а не наоборот. Я обновил свой ответ выше. Paul 12 лет назад 0
Близко, но не совсем. Ваша команда не работала как есть, и даже с настройками она не работала. Все в порядке, я сделаю это в два этапа. Я обновлю вещи здесь после того, как получу заключительные, рабочие шаги CLI. Еще раз спасибо. Pistos 12 лет назад 0
Я бы добавил `-filter Catrom` перед параметром` thumbnail`, потому что по моему опыту он обычно производит изображения более высокого качества. thdoan 10 лет назад 0
5
uı6ʎɹnɯ ꞁəıuɐp

One command to convert all PNGs from one folder:

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

mogrify is a command from ImageMagick package. You have to create output directory first.

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

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

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

Похожие вопросы