Сравнение значений пикселей в photoshop

#javascript #photoshop

#javascript #photoshop

Вопрос:

я хочу немного поработать с javascript в Photoshop. Технически, мне просто нужно знать, как сравнивать значения цвета пикселей 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);

    }
}
  

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

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

Комментарии:

1. Спасибо. О производительности: как глупо с моей стороны было думать, что я могу манипулировать пикселями с помощью photoshop : D