Заменить прозрачность изображений PNG на белый фон
У меня есть несколько изображений PNG с прозрачностью, и мне нужно создать версии со слоем изображения, составленным на белом фоне. Я пробовал разные вещи с операциями "преобразования" Image Magick, но либо ничего не происходит, либо я получаю ошибку. Я не хочу переходить к промежуточной форме JPG, потому что мне не нужны артефакты. Конечно, это легко сделать в Gimp или Photoshop или что-то еще, но я бы предпочел написать его из командной строки, потому что их много вещи.
примером неработающей команды Image Magick является:
convert img1.png -background white -flatten img1-white.png
это приводит к ошибке.
спасибо!
13 ответов
это работает для меня:
convert -flatten img1.png img1-white.png
ссылки на документацию:
-flatten
опция командной строки-
(
-flatten
эквивалентно-layers flatten
)
-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 и изменением размера просто не работает. Официальный и для меня единственный правильный способ - "удалить" альфа-канал.
- alpha remove-alpha off (не требуется с 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
Welp похоже, что мое решение установить "graphics magick" поверх " image magick "имеет некоторые грубые края - когда я переустанавливаю подлинную crufty старую" image magick", то вышеуказанная команда работает отлично.
редактировать, долгое время спустя-на днях я проверю, исправила ли" graphics magick " эту проблему.
это создает изображение, просто помещая 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 {} \;