1. Qiita
  2. 投稿
  3. JavaScript

任意の色グラデのCMYK分解カーブを画像化する

  • 4
    いいね
  • 0
    コメント

Labを指定し、Lのみ0〜100したグラデのCMYK値をPhotoshopに吐き出させて、Bridgeで読み込み画像にします。
汚いけど一応うごくから触らない!(再

Photoshop環境設定のCMYKプロファイル+マッチング方法を設定しておいて実行。
カラーピッカーで任意の色を選択すると、デスクトップにプロファイル名+LabのA+LabのBのファイル名のテキストを書き出す。

PhotoshopCMYK.jsx
#target photoshop
var myColor = new SolidColor;
app.showColorPicker();

var doc = app.documents.add(100, 50, 72, "CMYK Separation Curves", NewDocumentMode.CMYK);
var profile_name = doc.colorProfileName;
var myFColor = app.foregroundColor.lab.a+'_'+app.foregroundColor.lab.b;
doc.close(SaveOptions.DONOTSAVECHANGES);
profile_name=profile_name.replace (/\//g, '_');

var myFile=new File('~/Desktop/'+profile_name+'_'+myFColor);
myFile.open("w");
myFile.encoding='BINARY';
for (var myG=0;myG<101;myG++){
    myColor.lab.l=myG;
    myColor.lab.a = app.foregroundColor.lab.a;
    myColor.lab.b = app.foregroundColor.lab.b;
    myC = myColor.cmyk.cyan;
    myM = myColor.cmyk.magenta;
    myY = myColor.cmyk.yellow;
    myK = myColor.cmyk.black;
    myR = myColor.rgb.red;
    myGr = myColor.rgb.green;
    myB = myColor.rgb.blue;   
    myWrite = myG+"\t"+myR+"\t"+myGr+"\t"+myB+"\t"+myC+"\t"+myM+"\t"+myY+"\t"+myK;
    myFile.writeln(myWrite);

    }
myFile.close();

Bridgeで書き出したテキストを選択しておいて実行。
デスクトップにgrid.pngを置いておき、その上に描画する。
ファイル名はテキストファイル名+jpg

BridgeCMYKChart.jsx
#target "Bridge"
var myFile=app.document.selections;
var mySc=File(myFile[0].path);

var myLine=new Array();
mySc.open("r");
while(!mySc.eof){myLine.push(mySc.readln());}
mySc.close();

var myImg=new BitmapData(new File("~/Desktop/grid.png"));

var myAry=new Array();
for(var i=0;i<100;i++){
    myAry[i]=myLine[i].split("\t");

    var myColor=new Color(0,255,255);
    var myColor2 = new Color(myAry[i][1],myAry[i][2],myAry[i][3]);
    myDraw2(i*4,201,myColor2);
myDraw(i*4, 200-myAry[i][4]*2,myColor);
        var myColor=new Color(255,0,255);
myDraw(i*4, 200-myAry[i][5]*2, myColor);
        var myColor=new Color(255,255,0);
 myDraw(i*4, 200-myAry[i][6]*2, myColor);
        var myColor=new Color(0,0,0);
 myDraw (i*4, 200-myAry[i][7]*2, myColor);

}

myImg.exportTo(new File(myFile[0].path+".jpg"),100);

function myDraw(x,y,c){
    for(var a=0;a<4;a++){
        for(var b=0;b<2;b++){
    myImg.setPixel (x+a, y+b, c);
    }
}
}
function myDraw2(x,y,c){
    for(var a=0;a<4;a++){
        for(var b=0;b<20;b++){
    myImg.setPixel (x+a, y+b, c);
    }
}
}

grid.png

デスクトップに置いておく。

grid.png