Замените прозрачность в изображениях PNG на белый фон


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

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

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

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

спасибо!

13 226

13 ответов:

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

convert -flatten img1.png img1-white.png

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

-background white -alpha remove

пример:

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

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

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

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

однако, порядок выполнения команд-это очень важно

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

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png

единственный, который работал для меня, был смесью всех ответов:

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

использование-flatten заставило меня полностью разозлиться, потому что-flatten в сочетании с mogrify crop и изменением размера просто не работает. Официальный и для меня единственно правильный способ-это "убрать" альфа-канал.

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

см. документ:http://www.imagemagick.org/Usage/masking/#remove

The Альфа-Удалить на ImageMagick Руководство По Использованию предлагает использовать , например:

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

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

в руководстве говорится:

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

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

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

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

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

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

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

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

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

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

mogrify -background white -flatten */*.png

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

sudo yum install libpng libpng-devel

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

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

mogrify -alpha off ./*.png

Что ж, похоже, мое решение для того чтобы установить "графической магии" над "магия изображения" есть некоторые шероховатости - когда я переустановить натуральная crufty старый "магия образа", то эта команда прекрасно работает.

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

это создает изображение, просто помещая 1-й с прозрачностью поверх 2-го

composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

первоначально нашел подсказку на этот пост

чтобы удалить альфа-канал из файла, используйте Альфа-выкл:

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

Я видел этот вопрос и ответы, которые действительно помогают мне, но тогда мне нужно было сделать это для многих файлов, поэтому, если у вас есть несколько изображений (PNG-изображений) в одной папке, и вы хотите сделать это для всех:

find ./ -name "*.png" -exec convert {} -flatten {} \;