Archive for the 'Photoshop Elements 6' Category

2012/07/21 Photoshop Elementsでオープン中のEPSのクリッピングパスを検出して選択範囲を作成してコピー v2

「Photoshopでオープン中のEPSのクリッピングパスを検出して選択範囲を作成してコピー v2」をPhotoshop Elementsで動くかどうか、ほんの一部(アプリ名)だけを書き換えて動作確認したものです。

……動きますね(汗) 動かないとばかり思って試したのですが…………。

Photoshop Elementsにクリッピングパスどころか、パスの機能も付いていないんですけれど、

pele2.png
▲Photoshop Elementsの「ウィンドウ」メニューに「パス」は存在していない

AppleScriptからクリッピングパスに添った選択範囲を作らせてコピー&ペーストで新規画像にそのままペーストすると、Photoshopと同じ動作をします。

ただ、PhotoshopとPhotoshop Elementsの差別化のためか、Photoshop ElementsにCMYKの色モードが存在していないので、CMYKモードのEPSを開かせようとすると、

pele1.png

と、ダイアログで警告されます。CMYK→RGB変換ができるということは、実はCMYKのプロファイルとか変換機能などはElements内に入っているということで、カラー値のRGBとCMYKの相互変換までAppleScriptから呼び出せるわけです(同ScriptはElements上での動作確認ずみ)。

考えようによっては、(例によって)安価なMac mini上でPhotoshop Elementsを動かしておいて、自動で画像のクリッピングパス沿いの切り抜きやらリサイズを黙々と行わせておく、といった運用はかなり実用的だといえそうです。

おおきなおともだちのみなさまには、Photoshop Elementsが「ガワだけ取り換えたフルセットのPhotoshop」であることは明々白々。今後も、ぜひこの路線を堅持していただきたいものです。

OS X 10.8の環境用にAdobe Photoshop Elements 10 Editorを買ってもいいかな、と思わせるものがあります(確認していませんが、Scriptableだと信じています。AppStoreに「Scriptableだ」と書いておいてもらえるとよいのですが……)。

スクリプト名:Photoshop Elementsでオープン中のEPSのクリッピングパスを検出して選択範囲を作成してコピー v2
detectClippingPath() of me

on detectClippingPath()
  –クリッピングパス指定済みのEPSをPhotoshopでオープンした状態で呼び出すこと
  
tell application id “com.adobe.PhotoshopElements” –Photoshop Elements
    
    
activate –必須。Photoshopの仕様による
    
    
set myOptions to {class:JPEG save options, embed color profile:true, format options:progressive, quality:12, scans:3}
    
    
–単位を取得
    
set oldUnits to ruler units of settings
    
set ruler units of settings to pixel units
    
    
    
tell document 1
      set pList to every path item
      
if pList = {} then return –パスが存在しない場合
      
      
set targPath to “”
      
repeat with i in pList
        set j to contents of i
        
set aKind to kind of j
        
if aKind = clipping then
          set targPath to j
          
exit repeat
        end if
      end repeat
      
      
if targPath = “” then return –clipping pathが存在しない場合(pathはあるらしい)
      
      
create selection j operation replaced –ここが最重要。クリッピングパスから選択範囲を作成する
      
      
set {x1, y1, x2, y2} to bounds of selection
      
set xWidth to x2 - x1
      
set yHeight to y2 - y1
      
set aRatio to yHeight / xWidth
      
      
      
copy
      
      
close saving no
      
    end tell
    
    
–新規ドキュメント(背景色=白)を作ってそこにペースト
    
if aRatio > 0.6 then –縦横比が縦長から4:3までの処理
      set aDoc to make new document with properties {width:xWidth, height:yHeight, initial fill:white}
    else
      –ものすごく横長の画像への対処
      
set newHeight to (xWidth / 3) * 2.5
      
set aDoc to make new document with properties {width:xWidth, height:newHeight, initial fill:white}
    end if
    
    
–ペースト動作。画像が巨大な場合に時間がかかるケースがある
    
with timeout of 600 seconds
      tell aDoc
        paste
      end tell
    end timeout
    
    
    
–単位を元にもどす
    
set ruler units of settings to oldUnits
    
  end tell
  
end detectClippingPath

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

2011/12/20 与えられたテキストをPhotoshopでRGBデータと評価してCMYK値を返す

「XX, XX, XX」の形式のテキストをparseして、RGBデータとして評価し、Photoshop CS3でRGB→CMYKの変換を行うAppleScriptです。

AppleScriptObjCでカラーデータを入力するプログラムを作っていて、CMYK→RGBの変換は割とすぐできたのですが、RGB→CMYKで手こずり……PhotoshopならAppleScript3行でできてしまう処理。そこで、データをメール経由で収集したあとに手元のプログラムで(Photoshopの機能を用いて)変換することに。

非常に簡単で楽勝でした。

スクリプト名:与えられたテキストをPhotoshopでRGBデータと評価してCMYK値を返す
set aData to "64, 128, 0"
set {cNum, mNum, yNum, kNum} to retCMYKfromRGBstr(aData)
–> {87, 36, 100, 2}

–与えられたテキストをRGBデータと評価してCMYK値を返す
on retCMYKfromRGBstr(aData)
  if aData = "" then return {false, false, false, false}
  
  
set {rDat, gDat, bDat} to divideABC(aData, ",") of me
  
  
  
tell application "Adobe Photoshop CS3"
    set myCMYKColor to convert color {class:RGB color, red:rDat, green:gDat, blue:bDat} to CMYK
    
    
set cyanNum to cyan of myCMYKColor
    
set magentaNum to magenta of myCMYKColor
    
set yellowNum to yellow of myCMYKColor
    
set kuroNum to black of myCMYKColor
  end tell
  
  
set cyanNum to round cyanNum rounding as taught in school –四捨五入
  
set magentaNum to round magentaNum rounding as taught in school –四捨五入
  
set yellowNum to round yellowNum rounding as taught in school –四捨五入
  
set kuroNum to round kuroNum rounding as taught in school –四捨五入
  
  
return {cyanNum, magentaNum, yellowNum, kuroNum}
  
end retCMYKfromRGBstr

–文字列をparseする(R,G,B)の文字データを処理するためのもの
on divideABC(aStr, aDelim)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to aDelim
  
set tList to every text item of aStr
  
set AppleScript’s text item delimiters to curDelim
  
  
copy tList to {item1, item2, item3}
  
try
    set item1 to item1 as integer
    
set item2 to item2 as integer
    
set item3 to item3 as integer
  on error
    return false
  end try
  
  
return {item1, item2, item3}
end divideABC

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

これを、Photoshop CS3からPhotoshop Elements 6に変更してみたら……きちんと動作するのですが、計算結果がPhotoshop CS3とは異なりました。

スクリプト名:与えられたテキストをPhotoshop ElementsでRGBデータと評価してCMYK値を返す
set aData to "64, 128, 0"
set {cNum, mNum, yNum, kNum} to retCMYKfromRGBstr(aData)
–> {77, 27, 100, 14}

–与えられたテキストをRGBデータと評価してCMYK値を返す
on retCMYKfromRGBstr(aData)
  if aData = "" then return {false, false, false, false}
  
  
set {rDat, gDat, bDat} to divideABC(aData, ",") of me
  
  
  
tell application id "com.adobe.PhotoshopElements" –Phothop Elements
    set myCMYKColor to convert color {class:RGB color, red:rDat, green:gDat, blue:bDat} to CMYK
    
    
set cyanNum to cyan of myCMYKColor
    
set magentaNum to magenta of myCMYKColor
    
set yellowNum to yellow of myCMYKColor
    
set kuroNum to black of myCMYKColor
  end tell
  
  
set cyanNum to round cyanNum rounding as taught in school –四捨五入
  
set magentaNum to round magentaNum rounding as taught in school –四捨五入
  
set yellowNum to round yellowNum rounding as taught in school –四捨五入
  
set kuroNum to round kuroNum rounding as taught in school –四捨五入
  
  
return {cyanNum, magentaNum, yellowNum, kuroNum}
  
end retCMYKfromRGBstr

–文字列をparseする(R,G,B)の文字データを処理するためのもの
on divideABC(aStr, aDelim)
  set curDelim to AppleScript’s text item delimiters
  
set AppleScript’s text item delimiters to aDelim
  
set tList to every text item of aStr
  
set AppleScript’s text item delimiters to curDelim
  
  
copy tList to {item1, item2, item3}
  
try
    set item1 to item1 as integer
    
set item2 to item2 as integer
    
set item3 to item3 as integer
  on error
    return false
  end try
  
  
return {item1, item2, item3}
end divideABC

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

2009/10/04 Photoshop Elements v8の発表にともない、既存コンテンツをv6用として区別

AdobeのPhotoshop Elements v8の発表にともない、本ライブラリ上のPhotoshop Elements用のコンテンツをPhotoshop Elements v6用としてカテゴリ分けを変更しました。ただし、ディレクトリ名に変更はないので、リンクが切れることはありません。

従来のPhotoshop Elements v6がPhotoshop CS3相当のAppleScript用語辞書を搭載していたので、このPhotoshop Elements v8はPhotoshop CS4相当のAppleScript用語辞書を搭載しているものと推測されます。

2009/06/07 Photoshop Elementsで画像をぼかしてリサイズしてシャープネスをかける

Photoshop Elementsには、Photoshop CS3と同等のAppleScript用語辞書が搭載されており、AppleScriptからコントロールするかぎりはほぼ同等のソフトに見えます。

そこで、Photoshop ElementsがGUI側に用意していない機能をAppleScriptから操作するテストを行ってみました。

ブログに画面キャプチャを掲載するときによくやっているのが、一度ぼかしフィルタをかけてからリサイズ(縮小)し、リサイズ後にシャープネス・フィルタをかけるという作業です。

Photoshop上では、「イメージ」メニューの「画像解像度」コマンドを呼び出し、仕上がりのピクセルサイズを指定してリサイズできます。

ele3.jpg

ele4.jpg

ところが、Photoshop Elementsで「イメージ」メニューから「サイズ変更」→「画像解像度」を実行しても、仕上がりサイズをピクセルで指定することができません。

ele1.jpg

ele2.jpg

そこで、この操作をPhotoshop CS3に対して実行するAppleScriptを記述。

スクリプト名:Photoshop CS3で画像をぼかしをかけてからリサイズしてシャープに
tell application Adobe Photoshop CS3
  set oldUnits to ruler units of settings
  
set ruler units of settings to pixel units
  
tell document 1
    set w to width
    
set curRes to resolution
    
    
set newWidth to 450 ターゲットサイズ(横幅)
    
    
filter layer 1 using blur ぼかしフィルタ
    
resize image width newWidth resolution curRes resample method bicubic sharper
    
filter layer 1 using sharpen シャープフィルタ
    
  end tell
  
set ruler units of settings to oldUnits
end tell

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

うまく動いたら、tell ブロックの対象アプリケーションを「Adobe Photoshop CS3」から「Adobe Photoshop Elements」に変更し、コンパイル(構文確認)。

スクリプト名:Photoshop Elementsで画像をぼかしをかけてからリサイズしてシャープに
tell application Adobe Photoshop Elements
  set oldUnits to ruler units of settings
  
set ruler units of settings to pixel units
  
tell document 1
    set w to width
    
set curRes to resolution
    
    
set newWidth to 450 ターゲットサイズ(横幅)
    
    
filter layer 1 using blur ぼかしフィルタ
    
resize image width newWidth resolution curRes resample method bicubic sharper
    
filter layer 1 using sharpen シャープフィルタ
    
  end tell
  
set ruler units of settings to oldUnits
end tell

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

これで、実際に問題なく動作しました。Photoshopで大量の画像を定型処理しなくてはならないような場合、Mac miniあたりの安価なマシンをかき集めてきて、Photoshopをマシンの台数分だけ用意して分散処理するのは費用的になかなか難しいケースもありますが、Photoshop Elementsであればかなりお安いのでなかなかよさそうです。

2009/06/02 Photoshop Elementsでオープン中の画像のヒストグラムを取得する

Photoshop Elements(Photoshop CS1〜CS3も可)で、オープン中の画像のヒストグラムを取得するAppleScriptです。

photo1.jpg

こんな画像をオープンしているときのヒストグラムは……

photo2.jpg

のような状態になっており、その256段階の数値をAppleScriptから取得できます。

2つの画像を「差の絶対値」で差分検出した後に、ヒストグラムを数値で取得できれば「どの程度違う部分があるのか」を検出できます。「差の絶対値」で演算すると、2枚の画像の同じ部分は黒く、そうでない部分は他の色になるため……「黒くない」部分の分布状況をヒストグラムから取得すれば、どの程度違うのかを数値で表現可能になります。AppleScriptで画像処理を行う上で非常に重要な技術です。

なお、ヒストグラムは本Scriptのように画像から直接取得できるほか、チャンネル(channel)ごとにも取得できるようになっています。「赤の色成分が多い画像の場合には○○の処理をする」とか「ヒストグラムが暗い方に偏っているので明るくする」といった処理もできそうです。

スクリプト名:Photoshop Elementsでオープン中の画像のヒストグラムを取得する
tell application Adobe Photoshop Elements
  tell document 1
    set c to count every channel
    
set histList to histogram
  end tell
end tell

histList
> {0, 0, 0, 0, 0, 1, 3, 27, 91, 264, 425, 724, 888, 819, 604, 585, 474, 422, 467, 486, 478, 464, 472, 524, 483, 473, 460, 438, 441, 378, 384, 298, 256, 229, 200, 164, 148, 134, 137, 129, 113, 122, 111, 109, 116, 109, 131, 112, 134, 115, 95, 108, 115, 120, 135, 113, 124, 107, 123, 115, 128, 107, 153, 128, 113, 148, 129, 136, 135, 152, 146, 126, 144, 163, 173, 164, 152, 172, 181, 161, 176, 175, 179, 203, 203, 191, 226, 201, 234, 214, 240, 240, 206, 223, 248, 260, 263, 278, 250, 273, 281, 283, 302, 304, 295, 285, 238, 280, 277, 268, 301, 314, 334, 366, 369, 398, 414, 471, 501, 571, 595, 643, 704, 629, 624, 627, 620, 564, 661, 689, 765, 789, 862, 848, 878, 990, 988, 1037, 1127, 1230, 1354, 1474, 1752, 1973, 1806, 1288, 760, 579, 613, 629, 743, 756, 756, 771, 805, 902, 958, 993, 925, 922, 911, 1000, 1243, 1300, 1405, 1386, 1423, 1217, 662, 418, 239, 148, 122, 116, 115, 119, 94, 90, 89, 79, 69, 81, 57, 81, 43, 61, 47, 65, 48, 44, 46, 40, 40, 55, 39, 44, 34, 41, 44, 56, 45, 33, 33, 33, 40, 28, 28, 30, 23, 27, 20, 22, 14, 15, 9, 7, 8, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}

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

2009/05/28 Photoshop Elements 6のAS辞書はPhotoshop CS3と同じ

Photoshop Elements 6を買ってきて、AppleScript用語辞書を調べたところ……Photoshop CS3とまったく同じでした。Elementsにはアクション記録/実行用のインタフェース(メニューやパレット)はないものの、「do action」命令も存在している状態です。

do action v : play an action from the Actions Palette
do action text : the name of the action to play (note that the case of letters in the Action name is important and must match the case of the name in the Actions palette)
from text : the name of the action set containing the action being played (note that the case of letters in the Action Set name is important and must match the case of the name in the Actions palette)

ただ、そうはいってもアクションを指定しようがないので、実行はできないはずです。

Photoshop Elements 6用のScriptは、tellブロックのアプリケーション名をPhotoshop CS3に変更すれば、ほとんどの場合そのまま動きます。