Ответ 1
Это работает для меня:
convert -flatten img1.png img1-white.png
Ссылки на документацию:
-
-flatten
вариант командной строки -
-layers
опция командной строки (-flatten
эквивалентно-layers flatten
)
У меня есть PNG-изображения с прозрачностью, и мне нужно создавать версии со слоем изображения, составленным на белом фоне. Я пробовал различные вещи с помощью Image Magick "convert", но ничего не происходит вообще, или я получаю сообщение об ошибке. Я не хочу идти в промежуточную форму JPG, потому что мне не нужны артефакты. Конечно, это легко сделать в Gimp или Photoshop или что-то в этом роде, но я бы предпочел script его из командной строки, потому что есть много таких вещей.
Примером нерабочей команды Image Magick является:
convert img1.png -background white -flatten img1-white.png
Это приводит к ошибке.
Спасибо!
Это работает для меня:
convert -flatten img1.png img1-white.png
-flatten
вариант командной строки-layers
опция командной строки (-flatten
эквивалентно -layers flatten
)-background white -alpha remove -alpha off
Пример:
convert image.png -background white -alpha remove -alpha off 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
здесь, как заменить одно и то же изображение во всех папках в каталоге с белым, а не прозрачным:
mogrify -background white -flatten */*.png
Раздел 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
Welp похоже, что мое решение установить "графическую магию" над "маской изображения" имеет некоторые грубые грани - когда я переустанавливаю подлинную жестокую старую "магию изображения", тогда приведенная выше команда работает отлично.
изменить, спустя долгое время — На днях я проверю, исправила ли эта проблема "графическая магия".
Мне нужно было либо: -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
изначально нашел отзыв на этот пост
Чтобы фактически удалить альфа-канал из файла, используйте опцию alpha off:
convert in.png -background white -alpha off out.png
Я видел этот вопрос и ответы, которые действительно мне помогают, но тогда мне нужно было сделать это для большого количества файлов, поэтому, если у вас есть несколько изображений (PNG-изображений) в одной папке, и вы хотите сделать это для всех:
find ./ -name "*.png" -exec convert {} -flatten {} \;
Он -alpha выключен, НЕ -alpha удаляется! Загрузка из магазина приложений iOS не удалась, если на каком-либо значке есть альфа-канал !!
Вот как это сделать: mogrify -alpha off *.png