Как добавить фон в прозрачный PNG-файл?

#terminal #imagemagick

Вопрос:

Я пытаюсь добавить файл PNG в качестве фона к изображению PNG с прозрачными областями, используя ImageMagick следующим образом:

 convert input.png -texture bg.png output.png
 

Я не так далеко зашел, чтобы узнать, как заполнить мой фон до 100% ширины / высоты, потому что приведенный выше пример не работает. В итоге я получаю один и тот же файл, который прозрачен, и я не знаю почему.

Как я могу применить фон, который использует полную ширину/высоту по всему файлу? (Предпочтительно использовать метод обложки, что означает сохранение соотношения сторон фона и перекрытия вырезов)

Ответ №1:

Если вы хотите выделить фон, то в Unix попробуйте

 convert input.png (  clone -tile bg.png -draw "color 0,0 reset" )  swap -compose over -composite output.png
 

На окнах:

 convert input.png (  clone -tile bg.png -draw "color 0,0 reset" )  swap -compose over -composite output.png
 

Если вы просто хотите изменить размер фона, то в Unix попробуйте

 dims=$( convert input.png -format "%wx%h" info: )
convert input.png ( bg.png -resize $dims  repage )  swap -compose over -composite output.png
 

Я не настолько хорошо знаю Windows, чтобы рассказать вам, как сделать переменную

В ImageMagick 7, в Unix, вы можете сделать это проще, так как:

 magick input.png -set option:dims "%wx%h" ( bg.png -resize "%[dims]" )  swap -compose over -composite output.png
 

Или в окнах:

 magick input.png -set option:dims "%wx%h" ( bg.png -resize "%[dims]" )  swap -compose over -composite output.png
 

Комментарии:

1. Это позволит поместить фон за изображением, но оно не будет отцентрировано и масштабировано с помощью метода обложки. В моем случае фон больше, поэтому он не совпадает. Кроме того, я хотел бы получить объяснение этих шагов. (Ваш ответ лучше, чем ничего, так как я могу изменить размер верхнего изображения в соответствии с размером фона, так что, тем не менее, спасибо за это.)

2. Команда разбивает его на плитки. Вы не объяснили ясно, чего вы хотите. Изменить размер будет другой командой. Я опубликую это.