Заменить прозрачность в изображениях PNG на белый фон
У меня есть несколько PNG-изображений с прозрачностью, и мне нужно создать версии со слоем изображения, составленным на белом фоне. Я пробовал разные вещи с операциями преобразования изображений Image Magick, но либо ничего не происходит, либо я получаю ошибку. Я не хочу переходить на промежуточную форму JPG, потому что мне не нужны артефакты. Конечно, это легко сделать в Gimp, Photoshop или где-то еще, но я бы предпочел написать сценарий из командной строки, потому что таких вещей много.
Пример нерабочей команды Image Magick:
convert img1.png -background white -flatten img1-white.png
Это приводит к ошибке.
Спасибо!
17 ответов
Это работает для меня:
convert -flatten img1.png img1-white.png
Ссылки на документацию:
-flatten
опция командной строки-layers
опция командной строки (-flatten
эквивалентно-layers flatten
)
-background white -alpha off
Пример:
convert image.png -background white -alpha off white.png
Не стесняйтесь заменить white
с любым другим цветом, который вы хотите. Документация Imagemagick говорит об этом -alpha off
операция:
Эта операция проста и быстра, и выполняет работу без необходимости использования дополнительной памяти или других побочных эффектов, которые могут быть связаны с альтернативными методами удаления прозрачности. Таким образом, это предпочтительный способ удаления прозрачности изображения.
Свести изображение и применить фоновое изображение прямо в ImageMagick
Тем не менее, порядок команд очень важен
Чтобы применить любой фон к прозрачному изображению и сгладить его, сначала примените фон, а затем сгладьте его. Обратное не работает.
$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
Единственный, который работал для меня, был смесью всех ответов:
convert in.png -background white -alpha remove -flatten -alpha off out.png
Вот как заменить одно и то же изображение во всех папках в каталоге белым вместо прозрачного:
mogrify -background white -flatten */*.png
Использование -flatten привело меня в бешенство, потому что -flatten в сочетании с влажным урожаем и изменением размеров просто не работает. Официальный и для меня единственный правильный способ - "убрать" альфа-канал.
-альфа удалить -альфа выкл (не требуется с JPG)
Смотрите документацию: http://www.imagemagick.org/Usage/masking/
Раздел 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
Техника по-прежнему будет создавать несколько изображений, каждое из которых будет удалено из прозрачности.
Похоже, что ваша команда верна, поэтому проблема может быть в отсутствии поддержки PNG (). Вы можете проверить с convert -list configure
или просто попробуйте следующее:
sudo yum install libpng libpng-devel
Это не совсем ответ на ваш вопрос, но я нашел ваш вопрос, пытаясь выяснить, как удалить альфа-канал, поэтому я решил добавить этот ответ здесь:
Если вы хотите удалить альфа-канал с помощью imagemagick, вы можете использовать эту команду:
mogrify -alpha off ./*.png
Похоже, мое решение установить "графическую магию" поверх "графической магии" имеет некоторые острые углы - когда я переустанавливаю подлинную старую "графическую магию", тогда приведенная выше команда работает превосходно.
редактирование, долгое время спустя - на днях я проверю, исправила ли эта проблема "графика магии".
Я видел этот вопрос и ответы, которые действительно помогают мне, но тогда мне нужно было сделать это для большого количества файлов, поэтому, если у вас есть несколько изображений (PNG-изображений) в одной папке, и вы хотите сделать это для всех:
find ./ -name "*.png" -exec convert {} -flatten {} \;
Все перепробовал, ни один не работал. Этот сделал:
convert input.png -channel rgba -alpha set \
-fill none -opaque white \
-fill white -opaque black \
-fill white -opaque none \
-alpha off output.png
Мне нужно либо: оба -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
заменил прозрачные пиксели на правильный зеленый.
Это создает изображение, просто помещая 1-й с прозрачностью поверх 2-го
composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png
изначально нашла подсказку на этот пост
Чтобы фактически удалить альфа-канал из файла, используйте опцию альфа-отключения:
convert in.png -background white -alpha off out.png
Вариант без командной строки: откройте файл PNG в Windows Paint и нажмите "Сохранить".
Альфа отключена, НЕ альфа удаляется! Загрузка из магазина приложений iOS не удалась, если на любом значке есть альфа-канал!!
Вот как это сделать: mogrify -alpha off *.png