Skip to main content
Jason Burnett
Inspiring
Apr 3, 2021 2:30 AM UTC
Question

Creating a custom gradient from Sample Image

I have a simple noise-like gradient with lot of stops. I need a script that will sample each column of my document to get the color and add a stop to a gradient with that color. The end result would be a gradient fill pattern that matched the gradient in my image.

 

Ultimately, I want to use this new gradient to do a gradient map on a separate image.

 

This seems like it would be pretty easy to do, but I am having a hard time understanding JS in Photoshop...even with scriptListener installed. 

 

Any help would be greatly appreciated.

 

 

    This topic is closed to new replies. Start a new post to keep the conversation going.

    2 replies

    Jason Burnett
    Inspiring
    Apr 3, 2021 3:16 AM UTC

    I am trying to figure out the Photoshop DOM and it seems really strange to me. Here is some basic pseudocode that I thought I could just modify to work with PS, but it is not that easy I am finding.

    let doc=document; //grab a reference to the current document
    let cols=doc.getColumns(); //grab an array of references for 1px wide columns for the document;
    
    let stops=[]; //these will be the gradient stops
    let colCount=cols.length; //get the total count of columns
    for (let colNum=0;colNum<colCount;colNum++) { //iterate through columns
        let theCol=cols[colNum]; //grab a reference to the column
        let colColor=getColorValue(theCol,[0,0]); //sample the top pixel in the column
    stops.push({color:createColor(colColor), pos:createPos(colNum, colCount)});//push the color and the stop pct
    }
    let props={name:"testGradient"} //set any properties needed here
    let grad=new PSgradient(props, stops); //creates the new gradient fill.
    doc.addFill(grad); //adds the new gradient fill to the document
    
    function getColorValue(colRef,pixelPos) {
    //whatever it takes to sample the color of a column reference at a coordinate
    }
    function createColor(colorRef) {
        //whatever it takes to define a color in photoshop
    
    }
    function createPos (stopNum, stopCount) {
        return stopNum/stopCount; //may need to have integer stop percentages?
    }
    Translate
    erinferinferinf
    Adobe Employee
    Adobe Employee
    Apr 6, 2021 4:18 PM UTC

    The Photoshop DOM is indeed very confusing... 

     

    ScriptListener is rapidly becoming the old way of doing things. You might give the Alchemist plugin a try... here's a video about it: https://www.davidebarranca.com/development/adobe-uxp-things-you-need-to-know-7-batchplay-part-2-alchemist-plugin-listener

     

     

    Translate