Допустим, у вас есть изображение (PNG или JPG). У этого изображения белый фон, и мне нужно сделать его прозрачным.
Я пробовал с этими примерами:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
но без желаемых результатов.
Как я могу это сделать?
ВАЖНО: Используя convert
командную строку.
png
imagemagick
alpha-transparency
Израиль
источник
источник
convert original.png -transparent white new.png
но, попробовав ее, не могу заставить ее работать. Кстати, вы уверены, что ваш фон на самом деле белый (#FFFFFF) или он просто почти белый (например, #FEFEFE)?Ответы:
Я использую ImageMagick 6.6.9-7 в Ubuntu 12.04.
Для меня сработало следующее:
Это изменило весь белый цвет в test.png на прозрачный.
источник
У меня такая же проблема. В котором мне нужно удалить белый фон из формата изображения jpg / png с помощью ImageMagick.
Для меня сработало:
1) Преобразуйте формат изображения в png:
convert input.jpg input.png
2)
convert input.png -fuzz 2% -transparent white output.png
источник
mogrify -format png -median 2 -fuzz 5% -transparent white ico_*.jpg
Решение
объяснение
Это немного длиннее, чем приведенные ранее простые ответы, но дает гораздо лучшие результаты: (1) качество выше из-за сглаживания альфа- канала , и (2) удаляется только фон, а не один цвет. («Фон» определяется как примерно того же цвета, что и верхний левый пиксель, с использованием заливки по краям изображения.)
Кроме того, альфа-канал также размывается на полпикселя, чтобы избежать ореолов. Конечно, морфологические операции ImageMagick (пока?) Не работают на субпиксельном уровне, поэтому вы можете видеть, что я увеличиваю альфа-канал до 200% перед размывом.
Сравнение результатов
Вот сравнение простого подхода («-fuzz 2% -transparent white») с моим решением при запуске на логотипе ImageMagick . Я выровнял оба прозрачных изображения на коричневом фоне, чтобы различия были очевидны (нажмите, чтобы увидеть оригиналы).
Обратите внимание, как при простом подходе исчезла борода Волшебника. Сравните края мастера, чтобы увидеть, как сглаженная альфа помогает фигуре плавно переходить в фон.
Конечно, я полностью признаю, что бывают случаи, когда вы можете захотеть использовать более простое решение. (Например: его намного легче запомнить, и если вы конвертируете в GIF, вы все равно ограничены 1-битным альфа-каналом.)
сценарий оболочки mktrans
Поскольку вы вряд ли захотите вводить эту команду несколько раз, я рекомендую обернуть ее в сценарий. Вы можете загрузить сценарий оболочки BASH с github, который выполняет предложенное мной решение. Его можно запускать для нескольких файлов в каталоге и включать полезные комментарии на случай, если вы захотите что-то изменить.
bg_removal скрипт
Кстати, ImageMagick на самом деле поставляется со скриптом под названием «bg_removal», который использует floodfill так же, как и мое решение. Однако результаты невысокие, потому что он по-прежнему использует 1-битный альфа-канал. Кроме того, сценарий bg_removal работает медленнее и немного сложнее в использовании (он требует, чтобы вы указали два разных значения нечеткости). Вот пример вывода bg_removal.
источник
gimp
или что-то еще. :)Это работает для меня:
где чем меньше% пуха, тем ближе к истинному белому цвету или, наоборот, чем больше%, тем большее отклонение от белого может стать прозрачным
источник
mktrans
сценарий оболочки: github.com/hackerb9/mktransВы можете использовать это, чтобы сделать фон прозрачным
Вышеупомянутый префект дает прозрачный фон
источник
()
:convert more-icon.png -gravity center -background 'rgba(0,0,0,0)' -extent 27x27 new-more-icon.png
Используя ImageMagick, это очень похоже на код и результат hackerb9, но немного проще в командной строке. Он предполагает, что верхний левый пиксель является цветом фона. Я просто заливаю фон прозрачностью, затем выбираю альфа-канал, размываю его и удаляю половину размытой области, используя -уровень 50x100%. Затем снова включите все каналы и пригладьте до коричневого цвета. -Blur 0x1 -level 50x100% действует для сглаживания границ прозрачности альфа-канала. Вы можете настроить значение нечеткости, степень размытия и значение уровня 50%, чтобы изменить степень сглаживания.
источник
Если вы хотите контролировать уровень прозрачности, вы можете использовать rgba. где а - альфа. 0 для прозрачного и 1 для непрозрачного. Убедитесь, что конечный выходной файл должен иметь расширение .png для прозрачности.
источник
Ага. Была такая же проблема. Вот команда, которую я выполнил, и она отлично сработала:
convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico
источник