Сравните значения пикселей в фотошопе

Я хочу сделать небольшой фотошоп javascript. Технически, мне просто нужно знать, как сравнивать значения цвета пикселей af, если они были массивом с тремя целочисленными значениями в каждом, например: (псевдокод)

for all pixels x
    for all pixels y
        if left pixel's green channel is bigger than red channel:
            set the blue channel to 25
        else
            if the blue channel is greater than 50
                set the green channel to 0

в документации есть куча таких вещей, как фильтры, текст и слои, которые вы можете сделать, но как сделать что-то простое?

1 ответ

Решение

Чтение и запись значений пикселей в скриптах Photoshop действительно не так просто, как могло бы быть... Посмотрите на следующий скрипт, который инвертирует синий канал изображения:

var doc = app.open(new File("~/Desktop/test1.bmp"));

var sampler = doc.colorSamplers.add([0, 0]);

for (var x = 0; x < doc.width; ++x) {
    for (var y = 0; y < doc.height; ++y) {        

        sampler.move([x, y]);
        var color = sampler.color;

        var region = [
            [x, y],
            [x + 1, y],
            [x + 1, y + 1],
            [x, y + 1],
            [x, y]
        ];

        var newColor = new SolidColor();
        newColor.rgb.red = color.rgb.red;
        newColor.rgb.green = 255 - color.rgb.green;
        newColor.rgb.blue = color.rgb.blue;

        doc.selection.select(region);
        doc.selection.fill(newColor);

    }
}

Я не уверен, есть ли более красивый способ установить цвет пикселя, чем трюк select + fill.

Этот скрипт работает очень медленно, поэтому, возможно, скрипты Photoshop не лучший инструмент для манипулирования пикселями...

Другие вопросы по тегам