Заменить прозрачность в изображениях PNG на белый фон - PullRequest
253 голосов
/ 24 февраля 2010

У меня есть несколько изображений PNG с прозрачностью, и мне нужно создать версии со слоем изображения, составленным на белом фоне. Я пробовал разные вещи с помощью операций преобразования изображений Image Magick, но либо ничего не происходит, либо я получаю сообщение об ошибке. Я не хочу переходить на промежуточную форму JPG, потому что мне не нужны артефакты. Конечно, это легко сделать в Gimp, Photoshop или где-то еще, но я бы предпочел написать это из командной строки, потому что таких вещей много.

Пример нерабочей команды Image Magick:

convert img1.png -background white -flatten img1-white.png

Это приводит к ошибке.

Спасибо!

Ответы [ 15 ]

312 голосов
/ 09 декабря 2011
-background white -alpha remove -alpha off

Пример:

convert image.png -background white -alpha remove -alpha off white.png

Не стесняйтесь заменить white любым другим цветом, который вы хотите. В документации Imagemagick говорится об операции -alpha remove:

Эта операция проста и быстра, и выполняет работу без необходимости любое дополнительное использование памяти или другие побочные эффекты, которые могут быть связаны с альтернативными методами удаления прозрачности. Таким образом, предпочтительный способ удаления прозрачности изображения.

218 голосов
/ 24 февраля 2010

Это работает для меня:

convert -flatten img1.png img1-white.png

Ссылки на документацию:

44 голосов
/ 06 июня 2011

Сведение изображения и применение фонового изображения прямо в ImageMagick

Однако порядок команд очень важен

Чтобы применить любой фон к прозрачному изображению и сгладить его, сначала примените фон, а затем сгладьте его. Обратное не работает.

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
23 голосов
/ 16 февраля 2015

Единственное, что сработало для меня, было сочетание всех ответов:

convert in.png -background white -alpha remove -flatten -alpha off out.png
10 голосов
/ 28 сентября 2016

как заменить одно и то же изображение во всех папках в каталоге белым вместо прозрачного:

mogrify -background white -flatten */*.png

10 голосов
/ 21 апреля 2014

Использование -flatten привело меня в бешенство, потому что -flatten в сочетании с увлажненным урожаем и изменением размеров просто не работает. Официальный и для меня единственный правильный способ - «убрать» альфа-канал.

-альфа удалить -альфа выкл (не требуется с JPG)

См. Документацию: http://www.imagemagick.org/Usage/masking/#remove

6 голосов
/ 22 июня 2016

В разделе Alpha Remove в Руководстве по использованию ImageMagick предлагается использовать параметр -alpha remove, например ::

.
convert in.png  -background white  -alpha remove  out.png

... используя -background цвет по вашему выбору.

Руководство гласит:

Эта операция проста и быстра и выполняет работу без необходимости использования дополнительной памяти или других побочных эффектов, которые могут быть связаны с альтернативными методами удаления прозрачности. Таким образом, это предпочтительный способ удаления прозрачности изображения.

Дополнительно добавляет примечание:

Обратите внимание, что пока прозрачность «удалена», альфа-канал останется включенным, но теперь он будет полностью непрозрачным. Если вам больше не нужен альфа-канал, вы можете отключить его с помощью Alpha Off.

Таким образом, если вам не нужен альфа-канал, вы можете уменьшить размер выходного изображения, добавив параметр -alpha off, например:

convert in.png  -background white  -alpha remove  -alpha off  out.png

Дополнительные сведения о других, часто используемых методах удаления прозрачности описаны в разделе Удаление прозрачности из изображений .

В этот раздел включено упоминание важного предостережения относительно использования -flatten в качестве метода удаления прозрачности:

Однако это не будет работать с «mogrify» или с последовательностью из нескольких изображений, в основном потому, что оператор «-flatten» действительно предназначен для объединения нескольких изображений в одно изображение.

Итак, если вы конвертируете несколько изображений одновременно, например, генерируя миниатюры из файла PDF, -flatten не будет делать то, что вы хотите (он сведет все изображения для всех страниц в одно изображение). С другой стороны, при использовании техники -alpha remove все равно будет получено несколько изображений, каждое из которых будет удалено с прозрачностью.

5 голосов
/ 17 апреля 2015

Это не совсем ответ на ваш вопрос, но я нашел ваш вопрос, пытаясь выяснить, как удалить альфа-канал, поэтому я решил добавить этот ответ здесь:

Если вы хотите удалить альфа-канал с помощью imagemagick, вы можете использовать эту команду:

mogrify -alpha off ./*.png
5 голосов
/ 01 июля 2013

Похоже, что ваша команда верна, поэтому проблема может быть в отсутствии поддержки PNG (). Вы можете проверить с помощью convert -list configure или просто попробовать следующее:

sudo yum install libpng libpng-devel
3 голосов
/ 24 февраля 2010

Похоже, мое решение установить «графическую магию» поверх «графической магии» имеет некоторые неровные края - когда я переустанавливаю подлинную старую «графическую магию», тогда приведенная выше команда работает отлично.

edit , долгое время спустя & mdash; На днях я проверю, исправила ли эта проблема "графика магии".

...