Archive for the 'Photoshop CS6' Category

2014/10/06 最前面のQuickTimeムービーの現在のコマをコピーしてPhotoshopでJPEG保存

オープン中のQuickTimeムービーの現在のコマを静止画としてコピーして、PhotoshopでWeb用のJPEG(サイズが小さい)として書き出すAppleScriptです。

QuickTimeムービーの見どころだけをかいつまんでJPEGに書き出していたのですが、画面キャプチャをとったりなんだりで、3ステップぐらい手作業が必要だったので、いっぱつで実行できるようにAppleScriptを書いてみました。

各所にdelayを入れて時間待ちしているところがミソです。入れないとAppleScriptの実行が速すぎて、コピーなどの動作が完了しなかったためです。

また、QuickTime Player(X)の機能がおっそろしく少ないので、仕方なくGUI Scriptingを併用(現在のコマの内容をコピーする)しています。実行には、GUI Scriptingを許可しておく必要があります。

4d31d0bd-9459-478a-8fd5-f941a13f5453.jpg
▲ムービーから1コマだけ抜き出してPhotoshopでWeb用JPEG(サイズが小さい)に書き出した結果

スクリプト名:最前面のQuickTimeムービーの現在のコマをコピーしてPhotoshopでJPEG保存
set dPath to path to desktop
set dPathStr to dPath as string
set fPath to dPathStr & (do shell script “uuidgen”) & “.jpg”

–QuickTime書類の縦横ドットサイズを取得
tell application “QuickTime Player”
  
  
–ムービーを開いていないかチェック
  
set dCount to count every document
  
if dCount < 1 then
    display dialog “ムービーを開いた状態で実行してください” with icon 2 with title “エラー:書き出し対象のムービーが存在しません” buttons {“OK”} default button 1
    
return
  end if
  
  
tell document 1
    set {xWidth, yHeight} to natural dimensions
  end tell
  
end tell

–QuickTime Playerの書類の現在の位置の内容(静止画)をコピー
activate application “QuickTime Player”

delay 0.1

tell application “System Events”
  tell process “QuickTime Player”
    click menu item 5 of menu 1 of menu bar item 4 of menu bar 1 –編集>コピー
  end tell
end tell

delay 0.1

–Photoshopで新規書類を作成してペースト
tell application id “com.adobe.photoshop”
  activate
  
  
delay 0.1
  
  
make new document with properties {width:xWidth, height:yHeight}
  
paste
  
  
delay 0.1
  
  
–Resize & Save
  
tell current document
    
    
set aH to height
    
set aW to width
    
    
set aH1 to aH * 0.25
    
set aW1 to aW * 0.25
    
    
–resize image width aW1 height aH1
    
    
export in file fPath as save for web
    
    
close without saving
    
  end tell
  
  
end tell

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

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

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

2013/07/17 Photoshop CS6で複数の画像に対して1枚目の選択範囲を適用して切り抜き実行

Photoshop上で複数の画像(同じサイズ)をオープンしておき、最初にオープンした画像の上で任意の範囲を選択しておくと、その選択範囲でオープン中のすべての画像の切り抜きを行うAppleScriptです。

Photoshop CS6上でテスト&実行してみましたが、とくにそれほどバージョン依存はしていないものと思われます。

ps1.png

mj21.png

mj3.png

画面のスナップショットなど、同一ウィンドウ上の操作内容を説明するためにウィンドウごとスナップショットを(Command-Shift-4で)撮っておくことがままあります。ただ、ウィンドウ全体をそのまま載せるのはいまひとつ。操作箇所など同じ部分を切り抜いておきたいところです。

そのために、選択範囲そのものをコピーする機能がPhotoshopにはあるのですが、それとて画像の枚数が増えるとかったるくてやっていられません。

そこで、さっくり作ってみました。作るのに5分もかかっていませんが、案外役に立つと思います。

スクリプト名:Photoshop CS6で複数の画像に対して1枚目の選択範囲を適用して切り抜き実行
–同一の選択範囲で複数画像を切り抜く
tell application id “com.adobe.photoshop” –バージョン依存しないようにアプリケーション名称ではなくバンドルIDで指定
  set dCount to count every document
  
  
tell document 1
    set aSel to selection
    
try
      set {x1, y1, x2, y2} to bounds of selection
    on error
      display dialog “選択範囲が設定されていません。” buttons {“OK”} default button 1
      
return
    end try
    
    
crop bounds {x1, y1, x2, y2}
    
  end tell
  
  
  
–2枚目以降のピクチャを処理
  
repeat with i from 2 to dCount
    set current document to document i –指定ドキュメントを最前面に
    
    
tell document i
      crop bounds {x1, y1, x2, y2}
    end tell
  end repeat
end tell

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

2013/04/15 Photoshop上で選択範囲を指定色(RGB)で塗りつぶす

Photoshopでオープン中の画像の選択範囲に対して、指定のRGB色で塗りつぶすAppleScriptです。

あらかじめPhotoshopで何がしかの画像をオープンしておき、選択範囲を作成しておく必要があります。

スクリプト名:Photoshop上で選択範囲を指定色(RGB)で塗りつぶす

fillPhotoshopSelectedRegion(0, 0, 255) of me

–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

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

2013/04/15 Photoshopでオープン中の画像をグレースケール→白黒2値の画像にモードを変換する

Photoshopでオープン中の画像をグレースケール→白黒2値の画像にモード変換するAppleScriptです。

白黒2値に変換するさいには、階調をディザ拡散で表現するよう指定しています。

col10.png

スクリプト名:Photoshopでオープン中の画像をグレースケール→白黒2値の画像にモードを変換する
tell application id "com.adobe.photoshop"
  tell current document
    try
      –RGB 8ビットカラー→グレースケール
      
change mode to grayscale
      
      
–グレースケール→白黒2値
      
set aOPT to {class:Bitmap mode options, resolution:72, conversion method:diffusion dither} –ディザ拡散
      
–set aOPT to {class:Bitmap mode options, resolution:72, conversion method:pattern dither}–パターンディザ
      
change mode to bitmap with options aOPT
    end try
  end tell
end tell

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

2013/04/13 Photoshop CS6で指定RGB色の指定明度差の2色を計算する

Photoshop CS6で、指定色に対して(L*a*b*のL*の値で)指定分だけ明るい色と暗い色を計算してRGB値で返して色プレビューを行うAppleScriptです。

col11.png
▲指定した色

col21.png
▲指定色からL値で+10だけ明るい色のプレビュー

col3.png
▲指定色からL値で-10だけ暗い色のプレビュー

スクリプト名:Photoshop CS6で指定RGB色の指定明度差の2色を計算する
set aDiffL to 10 –明度差

–色選択
set {rCol, gCol, bCol} to choose color

–16ビット値→8ビット値 変換
set rCol to rCol div 256
set gCol to gCol div 256
set bCol to bCol div 256

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

copy aLAB to {elNum, aNum, bNum}

set bRGB to retRGBfromLABnumList(elNum + aDiffL, aNum, bNum) of me –明るい色
set cRGB to retRGBfromLABnumList(elNum - aDiffL, aNum, bNum) of me –暗い色

–色プレビューしてみる
set aRes to col8bitRGBPreview(bRGB) of me
set aRes to col8bitRGBPreview(cRGB) 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 “Adobe Photoshop CS6″
    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 “Adobe Photoshop CS6″
    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

–0〜255の8ビットの値から構成されるRGB値のリスト {r,g,b} の色をchoose colorでプレビューする
on col8bitRGBPreview(rgbColList)
  set aLen to length of rgbColList
  
  
if aLen is not equal to 3 then return false
  
  
set {r, g, b} to rgbColList
  
  
set asR to r * 256
  
set asG to g * 256
  
set asB to b * 256
  
  
set prevCol to {asR, asG, asB}
  
  
choose color default color prevCol
  
  
return true
  
end col8bitRGBPreview

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

2013/04/13 Photoshop CS6でRGB→RGB Hex、RGB Hex→RGB変換

Photoshop CS6で、RGB値とWebで利用するRGB16進数の文字列の相互変換を行うAppleScriptです。

Photoshop CS6の色空間の相互変換命令「convert color」のオプションにRGB Hexの記述があったので、本当に使えるのかどうか試すために書いてみたものです。

実際には、その程度ならAppleScript単体で処理できるので、「こんな機能もあるのか、へー」と感心する以上の実用性はありません。

ほかにも、Photoshop CS6の「convert color」命令はgrayscaleの色空間も扱えるようですが、さすがにそれは使わなさそうな……

スクリプト名:Photoshop CS6でRGB→RGB Hex、RGB Hex→RGB変換
–色選択
set {rCol, gCol, bCol} to choose color

–16ビット値→8ビット値 変換
set rCol to rCol div 256
set gCol to gCol div 256
set bCol to bCol div 256

set aRGBhexStr to retRGBhexfromRGBnumList(rCol, gCol, bCol) of me

set bRGB to retRGBfromRGBhexStr(aRGBhexStr) of me

return {{rCol, gCol, bCol}, aRGBhexStr, bRGB}
–> {{0, 128, 255}, "0080FF", {0, 128, 255}}

–与えられたリスト数値のRGBデータをRGB Hex文字列に変換して返す
–R:0〜255, G:0〜255, B:0〜255 
on retRGBhexfromRGBnumList(rNum, gNum, bNum)
  
  
tell application "Adobe Photoshop CS6"
    set myRGBColor to convert color {class:RGB color, red:rNum, green:gNum, blue:bNum} to RGB Hex
    
    
set aHex to hex value of myRGBColor
    
  end tell
  
  
return aHex
  
end retRGBhexfromRGBnumList

–与えられたRGB hex文字列データをRGB値に変換して返す
–R:0〜255, G:0〜255, B:0〜255 
on retRGBfromRGBhexStr(aRGBhexStr)
  
  
tell application "Adobe Photoshop CS6"
    set myRGBColor to convert color {class:RGB hex color, hex value:aRGBhexStr} 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 retRGBfromRGBhexStr

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

2013/04/13 Photoshop CS6でRGB→HSB、HSB→RGB変換

Photoshop CS6でRGB値とHSB値の相互変換を行うAppleScriptです。

海外でPhillipsのHueをコントロールするScriptを調べていたときに、カラーの値をHSBで与える(RGBでも指定できる?)ようで、RGBとHSBの変換を行うshell scriptのプログラムを見て、どうしよう(shellの内容をそのまま使うか、AppleScriptにすべて書き換えるか)と思っていたら……こんなお手軽な方法が、、、、

ただ、RGBとHSBの変換のためだけにPhotoshop CS6を使うというのも、それはそれでものすごく何かの無駄遣いのような……

スクリプト名:Photoshop CS6でRGB→HSB、HSB→RGB変換
–色選択
set {rCol, gCol, bCol} to choose color

–16ビット値→8ビット値 変換
set rCol to rCol div 256
set gCol to gCol div 256
set bCol to bCol div 256

set aHSB to retHSBfromRGBnumList(rCol, gCol, bCol) of me

copy aHSB to {hue_Num, saturation_Num, brightness_Num}

set bRGB to retRGBfromHSBnumList(hue_Num, saturation_Num, brightness_Num) of me

return {{rCol, gCol, bCol}, aHSB, bRGB}
–> {{102, 102, 255}, {239.996337890625, 60.000610351562, 100.0}, {102, 102, 255}}

–与えられたリスト数値のRGBデータをHSB値に変換して返す
–R:0〜255, G:0〜255, B:0〜255 
–H:0.0〜360.0, S:0.0〜100.0, B: 0.0〜100.0
on retHSBfromRGBnumList(rNum, gNum, bNum)
  
  
tell application "Adobe Photoshop CS6"
    set myLABColor to convert color {class:RGB color, red:rNum, green:gNum, blue:bNum} to HSB
    
    
set hue_Num to hue of myLABColor
    
set saturation_Num to saturation of myLABColor
    
set brightness_Num to brightness of myLABColor
    
  end tell
  
  
return {hue_Num, saturation_Num, brightness_Num}
  
end retHSBfromRGBnumList

–与えられたリスト数値のHSBデータをRGB値に変換して返す
–R:0〜255, G:0〜255, B:0〜255 
–H:0.0〜360.0, S:0.0〜100.0, B: 0.0〜100.0
on retRGBfromHSBnumList(hNum, sNum, bNum)
  
  
tell application "Adobe Photoshop CS6"
    set myRGBColor to convert color {class:HSB color, hue:hNum, saturation:sNum, brightness: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 retRGBfromHSBnumList

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

2013/04/13 Photoshop CS6でRGB→LAB、LAB→RGB変換

Adobe Photoshop CS6を使って、RGBカラーの値とL*a*b*の値(CIELAB D50)を相互変換するAppleScriptです。

Photoshop CS3のときにはAppleScriptからL*a*b*の値の処理はできなかったのですが、CS6に移行してできるようになっていたので感心しました。

RGB値からHSBなりL*a*b*の値に変換してしまえば、明度を変更した色の値を求めて、RGBに再変換して返すといった処理が気軽にできるので助かります。

スクリプト名:Photoshop CS6でRGB→LAB、LAB→RGB変換
–色選択
set {rCol, gCol, bCol} to choose color

–16ビット値→8ビット値 変換
set rCol to rCol div 256
set gCol to gCol div 256
set bCol to bCol div 256

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

copy aLAB to {elNum, aNum, bNum}

set bRGB to retRGBfromLABnumList(elNum, aNum, bNum) of me

return {{rCol, gCol, bCol}, aLAB, bRGB}

–与えられたリスト数値の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 “Adobe Photoshop CS6″
    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 “Adobe Photoshop CS6″
    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

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

2013/01/24 Photoshopのsave optionをテキストで指定して反映させるテスト

Photoshopにかぎらない話なのですが、ある処理を実行するルーチンがあったとして、外部からテキストでパラメータを与えたいケースというのが多々あると思います。

しかし、オプションを指定しようにも、アプリケーション内のオブジェクトを指定しなければならないケースが多々あり……ここでは、noneなどという他愛もないキーワードが、実はPhotoshopのAppleScript用語辞書に用意されている予約語のnoneでなければなりません。文字(string)で”none”などと指定すると、エラーになってしまいます。

そこで、無理な処理でも無理矢理実現するrun scriptコマンドの登場。古くは、レコード型の変数を動的に作成するなどという、AppleScriptの文法上は不可能なことをさくっと実現。当時はファイルに一度書き出して読み込んでやりとりしていましたが、さらに「手口」が洗練されて手軽に使う方法が確立してきました(ファイルI/Oを経由する必要はなかったという)。

というわけで、外部からはパラメータを文字列で指定して、処理ルーチン内でrun scriptコマンドでオブジェクトを動的に生成し、コマンドのオプションに指定するサンプルとして紹介しています。

スクリプト名:Photoshopのsave optionをテキストで指定して反映させるテスト
set aFile to choose file name with prompt “書き出し先のファイルパスを選択”
set aFilePathOrigStr to aFile as Unicode text

set aCompStr to “JPEG” as Unicode text —指定可能な文字列は、”none”, “LZW”, “ZIP”, “JPEG”
set profileFlag to true

–ファイル保存を行う
tell application id “com.adobe.photoshop”
  
  
–TIFF save optionsの指定用オブジェクトをテキストから動的に生成
  
set aScriptText to (“tell application id \”com.adobe.photoshop\” to “ & aCompStr)
  
set aCompObj to run script aScriptText
  
  
–TIFFオプションを指定して指定パスに保存する
  
set anOption to {class:TIFF save options, byte order:Mac OS, image compression:aCompObj, interleave channels:false, JPEG quality:12, layer compression:ZIP, save annotations:false, save image pyramid:false, save alpha channels:false, save layers:false, transparency:false, save spot colors:false, embed color profile:profileFlag}
  
save document 1 in file aFilePathOrigStr as TIFF with options anOption appending lowercase extension with copying
  
–close document 1 saving no
  
end tell

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

2012/12/15 PhotoshopでJavaScript経由でEPS/PDFをオープン

Adobe Photoshopには、「(AppleScriptからの)ファイルオープン時に、パスに全角の英数字もしくは全角スペースが含まれているとファイルオープンできない。フォルダ階層が深くなると指定のファイルをオープンできない」というバグが、最新のAdobe Photoshop CS6でも存在しています。

CS6.5とかCS7でこれが修正されるかどうかは定かではありません。

そこで、Adobeには期待せずAppleScriptからJavaScriptを呼び出して、ファイルのオープンを行うという方法を(IllustratorのCS2あたりでは多用していましたが)採用することになるわけですが、PDFやEPSをオープンする場合にはOpen Optionを指定しなければなりません。

そこで、JavaScriptのScripting Manualを読みつつ、JavaScript経由でOpen Optionを指定してEPS/PDFファイルをオープンするルーチンをさくっと作ってみました。

実際には、AppleScriptObjCのプログラムに組み込んで、CMYK画像だったらPhotoshopでプロファイル変換を行ってAppleScriptObjCのプログラムで表示したり、ファイルの保存を行ったりしています。

動作確認は、Photoshop CS6で行っています。

スクリプト名:PhotoshopでJavaScript経由でEPSをオープンする
set aTmpFile to choose file
set aRes to openEPSbyPhotoshop(aTmpFile, 72, “CMYK”)

–AppleScriptで直接Photoshopにファイルをオープンさせようとすると、日本語環境ではパスのハンドリングで
–問題が出ることがある(Photoshopのバグ)ので、JavaScript経由でEPSをオープンさせる
on openEPSbyPhotoshop(aFile, aResol, colorMode)
  
  
set aTmpPOSIX to quoted form of POSIX path of aFile
  
  
set jsText to
var fileRef = new File(” & aTmpPOSIX & “)

var epsOpenOptions = new EPSOpenOptions

epsOpenOptions.antiAlias = true
epsOpenOptions.constrainProportions = true
epsOpenOptions.mode = OpenDocumentMode.”
& colorMode &
epsOpenOptions.resolution = “
& (aResol as string) &

app.open( fileRef, epsOpenOptions )

  
  
with timeout of 600 seconds
    tell application id “com.adobe.photoshop”
      try
        do javascript jsText
      on error
        return false
      end try
    end tell
  end timeout
  
  
  
return true
  
end openEPSbyPhotoshop

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

スクリプト名:PhotoshopでJavaScript経由でPDFをオープンする
set aTmpFile to choose file
set aRes to openPDFbyPhotoshop(aTmpFile, 72, 1, “CMYK”)

–AppleScriptで直接Photoshopにファイルをオープンさせようとすると、日本語環境ではパスのハンドリングで
–問題が出ることがある(Photoshopのバグ)ので、JavaScript経由でPDFをオープンさせる
on openPDFbyPhotoshop(aFile, aResol, targPage, colorMode)
  
  
set aTmpPOSIX to quoted form of POSIX path of aFile
  
  
set jsText to
var fileRef = new File(” & aTmpPOSIX & “)

var pdfOpenOptions = new PDFOpenOptions

pdfOpenOptions.antiAlias = true
pdfOpenOptions.cropPage = CropToType.MEDIABOX
pdfOpenOptions.mode = OpenDocumentMode.”
& colorMode &
pdfOpenOptions.resolution = “
& (aResol as string) &
pdfOpenOptions.page = “
& (targPage as string) &

app.open( fileRef, pdfOpenOptions )

  
  
with timeout of 600 seconds
    tell application id “com.adobe.photoshop”
      try
        do javascript jsText
      on error
        return false
      end try
    end tell
  end timeout
  
  
return true
  
end openPDFbyPhotoshop

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