Удалите белую часть каждого цвета, чтобы сделать более светлые части более прозрачными.

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

Я хотел бы преобразовать белый цвет моего изображения в прозрачность, т.е. разложить серый на черный и прозрачный. Было бы правильно, если бы я мог использовать значение насыщенности пикселя из (де)композиции HSB, сделать насыщенность каждого пикселя равной 100% от исходного значения s(x,y) и добавить 100% - s(x, y) прозрачность до пикселя.

Как следует из упомянутого и многих других обходных путей, использование самого изображения в качестве альфа-канала не является решением. Например, если пиксель на 20% белый и на 80% серый, и вы применяете прозрачность 20%, то пиксель будет выглядеть как 80% - 0,8*0,2 = 56% черного вместо 80%.

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

Итак, вы хотите, чтобы серый цвет был прозрачным?
Я хочу, чтобы серый стал черным и наполовину прозрачным. Если это, например, 30% черного и 70% белого, оно должно быть 100% черным и 70% прозрачным.
Если пиксель на 20 % белый и 80 % серый (то есть 80 % черный и 20 % серый), вы примените прозрачность 40 % (20 % белого + 20 % белого) и получите около 60 % прозрачного черного, серого цвета, который это то, что я ожидал. Нет?
Если я понимаю, что вы хотите сделать, «Цветовые уравнения» Фабера Биррена укажут, какие пропорции необходимы для черного, белого и оттенка для любого изображения. Заменив X-parency на белый, можно определить процентное значение черного и оттенок.

Ответы (4)

Я знаю, вы спрашивали, как это сделать в Photoshop, но это может быть один из немногих случаев (теперь, когда в Photoshop также есть заливка с учетом содержимого), где GIMP справляется с этой задачей лучше. Итак, мое предлагаемое решение:

  1. Скачайте и установите GIMP. (Прокрутите вниз до установщика Windows.)

  2. Откройте свое изображение в GIMP.

  3. Используйте инструмент « Цвет в альфа -канал», чтобы преобразовать белый цвет в прозрачный ( маскируя и корректируя по мере необходимости, если вы хотите сохранить непрозрачный белый цвет в результате).

  4. Сохраните полученное изображение и снова откройте его в Photoshop.

Примечание. GIMP может импортировать и экспортировать файлы Photoshop .psd, но некоторая информация может быть потеряна во время обратного преобразования. Может быть безопаснее редактировать файлы PSD только в Photoshop и вместо этого использовать формат PNG для передачи изображений между Photoshop и GIMP.

Это именно то, что я искал. Я использовал тег adobe-photoshop, но я не говорил, что вы должны предоставить решение только с этой программой :)

Вы не можете изменить серый цвет на черный и сделать белый прозрачным одним методом. Единственный способ сделать это без маскирования — изменить уровни на всем изображении. Поэтому, если у вас есть что-то цветное, например, на изображении, вам придется это замаскировать.

(Сначала продублируйте слой с изображением и скройте его для резервного копирования) На своем слое создайте маску слоя. выделите все изображение и скопируйте его ctrl+shift+c. Alt + щелкните значок маски слоя на панели слоев, чтобы активировать ее. ctrl+shift+v вставьте его туда. Снимите выделение и нажмите ctrl+i, чтобы инвертировать цвета. Все белые области теперь должны быть черными, то есть они замаскированы на 100%.

Теперь создайте корректирующий слой порога. это должно сделать слой ниже (ваш слой изображения) чисто черно-белым. При необходимости отрегулируйте баланс и добавьте маску слоя к порогу, если у вас есть цветные области, которые вы не хотите преобразовывать из серого в черный. Выберите все ctrl+shift+c, скопируйте и вставьте на исходный слой с изображением.

В результате должна получиться черно-белая версия вашего изображения с исходными черно-белыми (не пороговыми) значениями, управляющими слоем прозрачности. Ваши 20% серых теперь будут отображаться как 20% черных.

1: Я не ищу одношаговый метод. 2: Мои цели довольно просты, и я также могу представить свои пожелания с помощью формул и уравнений. Photoshop — это продвинутая программа, я уверен, что есть способ делать то, что я хочу. 3: Предоставленное вами решение похоже на то, чего я стараюсь избегать. 4: я забыл подчеркнуть, но описание неявно содержит: любое решение «по мере необходимости» неприемлемо. 5: Спасибо за ваш ответ в любом случае :)
@DanielTuzes Я не уверен, насколько формулы являются эффективным способом описать то, что вам нужно. Насколько я понимаю, вы хотели черный цвет там, где ваши оттенки серого, но прозрачность должна быть черно-белым значением серого. Я описал самый простой способ сделать это без создания собственного скрипта/действия. Не уверен, как это можно интерпретировать как решение по мере необходимости, просто потому, что я добавил примечание, если это вам нужно сделать. Я действительно не уверен, что еще вы просите...

Просто из любопытства я придумал проверочный скрипт для PS, чтобы делать то, что вы предложили, но, к сожалению, он крайне медленный . Если вы хотите проверить это, создайте новый документ размером около 25 пикселей, назовите базовый слой «база», а затем добавьте два пустых слоя с именами «Альфа» и «HSB». Альфа-слой заполняется пикселями со значением серого (в RGB) на основе значения S, а слой HSB заполняется пикселями, значение S которых изменено на 100. Альфа-слой можно использовать в качестве маски слоя для слой HSB (выделить все, добавить маску слоя к слою HSB, переключиться на каналы и вставить скопированный альфа-слой в канал маски HSB).

Если вы скроете все палитры, кажется, что он работает немного быстрее, но реальное изображение будет медленным «иди, выпей кофе и, может быть, по магазинам». "Вздремнуть" медленно.

var currDoc = app.activeDocument;

var sampler = currDoc.colorSamplers.add([0,0]);
for (var x = 0; x < currDoc.width; ++x) {
    for (var y = 0; y < currDoc.height; ++y) {
        currDoc.activeLayer = currDoc.artLayers.getByName("base");
        sampler.move([x,y]);

        var result = selectPixel(x,y, currDoc);
        result = setPixelColorHSB(sampler.color, currDoc);
        result = setPixelColorALPHA(sampler.color, currDoc);

    }
}
sampler = null;
currDoc.selection.deselect;

function setPixelColorHSB(pixelColor, currDoc)  {
    currDoc.activeLayer = currDoc.artLayers.getByName("HSB");
    currDoc.activeLayer.visible = true;

    var color = new SolidColor();

    color.hsb.hue = pixelColor.hsb.hue;
    color.hsb.saturation = 100;
    color.hsb.brightness=pixelColor.hsb.brightness;

    currDoc.selection.fill(color);
    currDoc.activeLayer.visible = false;
    return true;
}

function setPixelColorALPHA(pixelColor, currDoc)    {
    currDoc.activeLayer = currDoc.artLayers.getByName("ALPHA");
    currDoc.activeLayer.visible = true;

    var color = new SolidColor();

    color.rgb.red = Math.floor((pixelColor.hsb.saturation/100) * 255);
    color.rgb.green = color.rgb.red;
    color.rgb.blue = color.rgb.red;

    currDoc.selection.fill(color);
    currDoc.activeLayer.visible = false;
    return true;
}

function selectPixel (pixX, pixY, currDoc)  {
    currDoc.selection.deselect;
    var selRegion = null;
    selRegion = [
        [pixX, pixY],
        [pixX + 1, pixY],
        [pixX + 1, pixY + 1],
        [pixX, pixY + 1],
        [pixX, pixY]
        ];
    currDoc.selection.select(selRegion);
    return true;
}
+1 за усилия по написанию сценария, независимо от того, сколько вам нужно вздремнуть, ожидая его завершения.

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

К сожалению, это решение не является общим из-за использования канала cmyk. Но с помощью этой процедуры вы можете получить этовведите описание изображения здесь

из этого: введите описание изображения здесь(скачайте картинки и просмотрите прозрачность, если не видите отличий)

  1. откройте изображение в режиме cmyk или измените режим изображения на cmyk
  2. создать новый альфа-канал Alpha Cyan на основе канала Cyan: на панели каналов сделать видимым и выделить Cyan, скопировать (выделить все, ctrl+c); создайте новый слой Alpha Cyan и вставьте уже скопированный в буфер обмена Cyan канал (ctrl+v)
  3. сделайте видимыми только каналы cmyk и вставьте новый слой с голубым сплошным цветом, поэтому на панели слоев создайте новый слой; добавьте к нему голубой сплошной цвет, назовите его Color Fill Cyan; добавьте к нему векторную маску; загрузите канал Alpha Cyan и сохраните в канал Color Fill Cyan Mask
  4. повторите 2 и 3 для пурпурного, желтого и черного цветов.
  5. скройте исходный слой, удалите белый фоновый слой, если он существует, убедитесь, что новые 4 части слоя видны
  6. установите видимость 4 слоев, чтобы затемнить или умножить
  7. установите режим изображения на rgb, если хотите