С помощью GIMP вы можете «стереть» цвет?

9

В настоящее время я работаю над приложением для iOS и пытаюсь перепроектировать их стандартное диалоговое окно оповещения. Мне удалось выяснить, какое значение альфа-канала на используемом фоне используется путем выборки цветов на фоне сплошного черного и сплошного белого.

Учитывая эту информацию, можно ли с помощью GIMP просто «стереть» цвет фона, чтобы у меня остался только исходный необработанный фон оповещения?

У меня только вид оповещения в виде изображения как скриншот из запущенного приложения.

Дэн Ф
источник

Ответы:

8

Да, это возможно. Позвольте мне описать, как это делается, используя это изображение из Wikimedia Commons (автор ed_g2s , лицензированный как CC-By-SA 3.0 ) в качестве примера:

Демонстрационное изображение прозрачности PNG от ed_g2s, лицензировано как CC-By-SA 3.0

  1. Откройте черно-белые фоновые версии как слои одного и того же изображения (используя « Открыть как слои» или просто откройте и скопируйте и вставьте одну в другую). Переместите белый слой над черным, если это не так. Два слоя должны выглядеть примерно так:

    Демонстрационное изображение с черным фоном Демонстрационное изображение с белым фоном

  2. Возьмите разницу между слоями: клонируйте черный слой (он понадобится вам позже), измените режим слоя белого слоя на «различие» и объедините его. Инвертировать результат. Это дает вам альфа-канал исходного изображения.

    Реконструированный альфа-канал

    Изменить: Если ваш фон не черный и белый, инвертированный слой различий не будет иметь черный фон. Чтобы это исправить, сначала обесцветьте слой (используя тот режим, который обеспечивает наилучшую контрастность), а затем используйте Цвета → Авто → Нормализация, чтобы сделать фон черным. Вы также можете использовать Channel Mixer , но это немного сложнее.

    ( Нормализация выше работает, если воссоздаемый альфа-канал имеет хотя бы некоторые части с непрозрачностью 100%; если воссоздаемое изображение везде полупрозрачное, вы можете использовать Цвета → Уровни ..., чтобы вместо этого установить только черную точку. )

    Если у вас его еще нет, вам также нужно создать версию вашего изображения с черным фоном для следующего шага. Для этого используйте следующие дополнительные шаги:

    • Выберите любую оригинальную версию с темным фоном. Создайте новый слой поверх него, заполненный цветом фона.
    • Клонируйте разностный слой и переверните его, чтобы он имел белый фон. Поместите этот слой поверх нового сплошного цвета, который вы только что создали, установите его режим слоя на «умножение» и объедините его.
    • Наконец, измените режим результирующего слоя на «вычитание» и объедините его с слоем с исходным изображением. Это должно вычесть исходный фон, оставив изображение на черном фоне.
  3. Если бы мы использовали формат изображения с предварительно умноженной альфой, мы бы более или менее сделали это сейчас. Но так как мы не являемся, нам все еще нужно демультиплексировать каналы RGB. Чтобы сделать это, клонируйте альфа-слой, который мы создали на предыдущем шаге (или просто скопируйте его в буфер обмена), установите его режим слоя на «деление» и объедините его с черным фоновым слоем, который был клонирован до шага 2. Результат должен выглядеть следующим образом (сравните с оригинальной черной фоновой версией, чтобы увидеть разницу):

    Умноженные каналы RGB

  4. Теперь добавьте маску слоя к полученному слою, выберите маску и вставьте в нее альфа-слой. Результат теперь должен выглядеть более или менее как исходное прозрачное изображение. Наконец, чтобы превратить маску в правильный альфа-канал, вы можете применить ее (но экспорт GIMP в PNG сделает это за вас, даже если вы этого не сделаете). И вот вы - один восстановленный прозрачный PNG, готовый к работе:

    Восстановленное изображение с прозрачностью

Конечно, эта техника действительно требует наличия версий изображения на чистом черном и чистом белом фоне. Если фон немного отклонен, аналогичные методы могут все еще использоваться, но вам, возможно, придется сделать дополнительные корректировки цвета, и результаты могут быть не столь идеальными. ( Изменить: см. Дополнения к шагу 2 выше. Измененные инструкции должны работать с фонами любого цвета, если они сплошные.)


Ps. GIMP также имеет функцию «Стирание цвета» (в качестве режима наложения для инструмента «Заливка» или « Цвет для альфа- канала ... для всего изображения»), которая полезна для восстановления прозрачности, когда у вас есть только одна версия изображения. на сплошном цветном фоне. Однако, если его не использовать осторожно, он имеет тенденцию создавать более прозрачный вывод, чем вы, вероятно, хотели бы .

Pps. Если вы очень тщательно сравните исходное и восстановленное изображения, вы увидите, что они не совсем идентичны - некоторые значения цвета смещены на 1/256 или около того. Это связано с тем, как работает режим «разделить» слой в GIMP : вместо вычисления истинного обратного коэффициента альфа-умножения, который будет иметь вид output = (255 × input ) / layer , он фактически вычисляет output = (256 × input ) / ( layer+1) Это несоответствие, которое якобы сделано для того, чтобы избежать деления на ноль, означает, что некоторые цвета могут округляться до немного отличного значения, чем они должны. Увы, я не знаю другого пути, кроме как исправить патч GIMP, написать плагин для деления, как мы хотим, или использовать какую-то другую программу. К счастью, разница в цвете редко, если вообще ощущается человеческим глазом.

Илмари Каронен
источник