Archive for the 'Photoshop CC' Category

2014/01/29 Photoshopで作業空間のICC Profileを考慮しつつRGB値からL*a*b*値に変換

Photoshopで、作業空間のICC Profileを考慮しつつ指定のRGB色をL*a*b*に変換するAppleScriptです。

Photoshopの色変換機能を用いると指定の色空間同士の変換が行えますが、たとえばCMYKの色空間でICC Profileを考慮しないのは無意味(出力デバイス不在のCMYKなんて)ですが、RGBからの変換であってもICC Profileを考慮しつつ変換してくれないと困る場合が多いです。

そこで、現在設定中の作業用ICC Profileを考慮しつつ、色変換を行う方法を見つけました。

やり方は簡単で……カラの書類を作って指定のRGB色で塗り、塗った色をcolor samplerで取得して、取得後にL*a*b*の色に変換するというものです。

実際に、色を塗ってGUI側から調べたのと同じ数値がとれています(GUI側は小数点以下を問答無用で削除して表示)。

RGBの作業スペースにsRGBのICC Profileを指定した状態で、R:10, G:0, B:10のRGB色をL*a*b*に変換すると……

Photoshopの内蔵機能だけで変換:
{0.775146484375, 3.227569580078, -3.317077636719}

Photoshop上で実際に塗ってからピックアップ:
{0.857543945312, 3.624450683594, -3.61279296875}

……と、けっこう演算結果が違います(動作確認はPhotoshop CC+OS X 10.9にて実施)。

スクリプト名:Photoshopで作業空間のICC Profileを考慮しつつRGB値からL*a*b*値に変換
set rCol to 10
set gCol to 0
set bCol to 10

set imgHeight to 2
set imgWidth to 2

tell application id “com.adobe.photoshop”
  
  
set aDoc to make new document with properties {height:imgHeight, width:imgWidth, mode:RGB}
  
makePhotoshopSelectionRegion(0, 0, imgWidth, imgHeight) of me –選択
  
fillPhotoshopSelectedRegion(rCol, gCol, bCol) of me –塗りつぶし
  
  
tell aDoc
    set aSampler to make new color sampler with properties {class:color sampler, position:{1, 1}}
    
set myRGBColor to color sampler color of aSampler
  end tell
  
  
set redNum to red of myRGBColor
  
set greenNum to green of myRGBColor
  
set blueNum to blue of myRGBColor
  
  
set {rRes, gRes, bRes} to retLABfromRGBnumList(redNum, greenNum, blueNum) of me
  
  
close every document saving no
  
end tell

return {rRes, gRes, bRes}

–Photoshop上で選択範囲を指定色(RGB)で塗りつぶす
on fillPhotoshopSelectedRegion(rNum, gNum, bNum)
  tell application id “com.adobe.photoshop”
    tell current document
      set aCol to {class:RGB color, red:rNum, green:gNum, blue:bNum}
      
      
fill selection with contents aCol
    end tell
  end tell
end fillPhotoshopSelectedRegion

–Photoshop上で指定矩形を選択する
on makePhotoshopSelectionRegion(x1, y1, x2, y2)
  tell application id “com.adobe.photoshop”
    tell current document
      select region {{x1, y1}, {x2, y1}, {x2, y2}, {x1, y2}} combination type replaced
    end tell
  end tell
end makePhotoshopSelectionRegion

–与えられたリスト数値のRGBデータをLAB値に変換して返す
–R:0〜255, G:0〜255, B:0〜255 
–L*:0.0〜100.0, a*:-128.0〜127.0, b*: -128.0〜127.0
on retLABfromRGBnumList(rNum, gNum, bNum)
  
  
tell application id “com.adobe.photoshop”
    set myLABColor to convert color {class:RGB color, red:rNum, green:gNum, blue:bNum} to Lab
    
    
set L_Num to value_L of myLABColor
    
set A_Num to value_a of myLABColor
    
set B_Num to value_b of myLABColor
    
  end tell
  
  
return {L_Num, A_Num, B_Num}
  
end retLABfromRGBnumList

–与えられたリスト数値のLABデータをRGB値に変換して返す
–R:0〜255, G:0〜255, B:0〜255 
–L*:0.0〜100.0, a*:-128.0〜127.0, b*: -128.0〜127.0
on retRGBfromLABnumList(elNum, aNum, bNum)
  
  
tell application id “com.adobe.photoshop”
    set myRGBColor to convert color {class:Lab color, value_L:elNum, value_a:aNum, value_b:bNum} to RGB
    
    
set redNum to red of myRGBColor
    
set greenNum to green of myRGBColor
    
set blueNum to blue of myRGBColor
  end tell
  
  
set redNum to round redNum rounding as taught in school –四捨五入
  
set greenNum to round greenNum rounding as taught in school –四捨五入
  
set blueNum to round blueNum rounding as taught in school –四捨五入
  
  
  
return {redNum, greenNum, blueNum}
  
end retRGBfromLABnumList

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

スクリプト名:Photoshopで普通にRGBからL*a*b*値に変換
set rCol to 10
set gCol to 0
set bCol to 10

set aLAB to retLABfromRGBnumList(rCol, gCol, bCol) of me

–与えられたリスト数値のRGBデータをLAB値に変換して返す
–R:0〜255, G:0〜255, B:0〜255 
–L*:0.0〜100.0, a*:-128.0〜127.0, b*: -128.0〜127.0
on retLABfromRGBnumList(rNum, gNum, bNum)
  
  
tell application id “com.adobe.photoshop”
    set myLABColor to convert color {class:RGB color, red:rNum, green:gNum, blue:bNum} to Lab
    
    
set L_Num to value_L of myLABColor
    
set A_Num to value_a of myLABColor
    
set B_Num to value_b of myLABColor
    
  end tell
  
  
return {L_Num, A_Num, B_Num}
  
end retLABfromRGBnumList

–与えられたリスト数値のLABデータをRGB値に変換して返す
–R:0〜255, G:0〜255, B:0〜255 
–L*:0.0〜100.0, a*:-128.0〜127.0, b*: -128.0〜127.0
on retRGBfromLABnumList(elNum, aNum, bNum)
  
  
tell application id “com.adobe.photoshop”
    set myRGBColor to convert color {class:Lab color, value_L:elNum, value_a:aNum, value_b:bNum} to RGB
    
    
set redNum to red of myRGBColor
    
set greenNum to green of myRGBColor
    
set blueNum to blue of myRGBColor
  end tell
  
  
set redNum to round redNum rounding as taught in school –四捨五入
  
set greenNum to round greenNum rounding as taught in school –四捨五入
  
set blueNum to round blueNum rounding as taught in school –四捨五入
  
  
  
return {redNum, greenNum, blueNum}
  
end retRGBfromLABnumList

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に