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

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

Примером нерабочей команды Image Magick является:

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

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

Спасибо!

Ответ 2

-background white -alpha remove -alpha off

Пример:

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

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

-alpha remove -alpha off (не требуется с JPG)

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

Ответ 6

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

mogrify -background white -flatten */*.png

Ответ 7

Раздел 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 будет по-прежнему создавать несколько изображений, каждый из которых имеет прозрачность.

Ответ 8

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

sudo yum install libpng libpng-devel

Ответ 9

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

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

mogrify -alpha off ./*.png

Ответ 10

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

изменить, спустя долгое время — На днях я проверю, исправила ли эта проблема "графическая магия".

Ответ 11

Мне нужно было либо: -alpha background и -flatten, либо -fill.

Я сделал новый PNG с прозрачным фоном и красной точкой посередине.

convert image.png -background green -alpha off green.png не удалось: получилось изображение с черным фоном

convert image.png -background green -alpha background -flatten green.png создал изображение с правильным зеленым фоном.

Конечно, с другим файлом, который я переименовал в image.png, он ничего не смог сделать. Для этого файла я обнаружил, что цвет прозрачных пикселей был "# d5d5d5", поэтому я залил этот цвет зеленым:

convert image.png -fill green -opaque "#d5d5d5" green.png заменил прозрачные пиксели на правильный зеленый.

Ответ 12

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

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

изначально нашел отзыв на этот пост

Ответ 13

Чтобы фактически удалить альфа-канал из файла, используйте опцию alpha off:

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

Ответ 14

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

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

Ответ 15

Он -alpha выключен, НЕ -alpha удаляется! Загрузка из магазина приложений iOS не удалась, если на каком-либо значке есть альфа-канал !!

Вот как это сделать: mogrify -alpha off *.png