Используя GIMP, вы можете «стереть» цвет?

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

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

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

Ответы (1)

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

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

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

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

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

    Восстановленный альфа-канал

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

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

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

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

    Деумноженные каналы RGB

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

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

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


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

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