PhotoShop JavaScript(ExtendScript)
PhotoShopで自動処理を行うための、JavaScript(ExtendScript)のメモです。
※ この記事は量が増えていったら分割するかもしれません。
※ Windows版 PhotoShop CS2でしか検証してないので、他のバージョンで動くかは不明。
ドキュメントの操作
ファイルパスを指定してドキュメントのオープン
//Windowsではパスの区切りは / スラッシュ。Unixっぽい指定。
//d:\sample\test.phd → /d/sample/test.psd
var doc = app.open("/d/sample/test.psd");
現在アクティブになっているドキュメント取得
var doc = app.activeDocument;
イメージサイズの変更
//単位は既定の単位。たぶん //横500 縦400 doc.resizeImage(500, 400);
キャンバスのサイズ変更
//単位は既定の単位。おそらく。 //横300 縦400 中央を基点 doc.resizeCanvas(300, 400, AnchorPosition.MIDDLECENTER);
レイヤーの操作
レイヤー追加
//アートレイヤー追加 var newlayer = doc.artLayers.add();
レイヤーの取得
//インデックスで指定
var layer = doc.artLayers[0];
//レイヤー名で指定
var layer = doc.artLayers("layer name");
レイヤーの種類変更
//テキストレイヤーにする newlayer.kind = LayerKind.TEXT;
レイヤースタイル設定
//スタイル名はPhotoShop側でスクリプト実行前にあらかじめ作っておく
newlayer.applyStyle("layer_style_name");
メタデータの設定
//ここで入れたデータは書類情報??プロパティ?に入る //著者名 doc.info.author = "author name"; //所有者のURL doc.info.ownerUrl = "http://www.exsample.com"; //著作権情報 doc.info.copyrighted = CopyrightedType.COPYRIGHTEDWORK;
テキストの操作
//レイヤー追加 //テキストレイヤーは空のレイヤーしか作れない var newlayer = doc.artLayers.add(); //レイヤーの種類をテキストレイヤーに newlayer.kind = LayerKind.TEXT; //テキストアイテム取得 var ti = newlayer.textItem; //テキストの内容 ti.contents = "テキスト内容"; //テキストカラー(RGBで指定。他のカラーモードの場合はそれように変更) ti.color.rgb.red = 255; ti.color.rgb.green = 100; ti.color.rgb.blue = 100; //フォント名の設定 //layer.textItem.fontで取得できるフォント名(Arial-BoldMT KozGoPro-Bold 等) //文字ウィンドウで表示されるのと違うので注意 ti.font = "KozGoPro-Medium"; //アンチエイリアス ti.antiAliasMethod = AntiAlias.SMOOTH; //文字サイズ設定 //単位はポイントなので、他の単位で指定する場合は計算する ti.size = 12; //段落テキストか、一行テキストか ti.kind = TextType.PARAGRAPHTEXT; //テキストエリアサイズ指定 //単位はポイントなので、他の単位で指定する場合は計算する ti.width = 300; ti.height = 200; //位置 //x:10 y:20 ti.position = new Array(10, 20); //文字位置 ti.justification = Justification.CENTER; //トラッキング(文字の離れ量指定) ti.tracking = 150;
JPEG形式で保存する(メニューの ファイル→別名保存と同じ)
カラーチャンネルを変更する
//カラーチャンネルを8bitにする(カラーチャンネルが16bit以上の場合) //JPEGは24ビットまでしか扱えない。8bit*RGBの3チャンネルで24bit //保存時に自動的に変換...というのはないみたい doc.bitsPerChannel = BitsPerChannelType.EIGHT;
jpg保存オプション設定
jpegOpt = new JPEGSaveOptions(); //カラープロファイルを埋め込むか jpegOpt.embedColorProfile = false; //画質(1~12 デフォルトは3 大きいほど高品質) jpegOpt.quality = 7; //ベースライン・プログレッシブの指定 jpegOpt.formatOptions = FormatOptions.STANDARDBASELINE; //マットタイプの指定....これはよくわからない pegOpt.matte = MatteType.WHITE;
Web用に保存する
//Web用に保存用の設定をする
var exp = new ExportOptionsSaveForWeb();
//画像の形式
//COMPUSERVEGIF, JPEG, PNG-8, PNG-24, BMP の指定が可能
exp.format = SaveDocumentType.JPEG;
//インターレースにするか(プログレッシブJPGにするか)
exp.interlaced = false;
//最適化するか
exp.optimized= false;
//画質(0~100 デフォルトは60 大きいほど高品質)
exp.quality = 70;
//エクスポート実行
var imgfile = new File("/d/sample/test_web.jpg");
doc.exportDocument(imgfile, ExportType.SAVEFORWEB, exp);
フォルダの操作
var dir = new Folder(IN_DIR);
//フォルダの存在確認
if(dir.exists){
//フォルダ有
}
//指定フォルダ以下のファイルリストを取得
//フィルタ指定も可能
var files = dir.getFiles("*.psd");
//フォルダ以下のファイル数取得
var filecnt = files.length;
//1つめのファイル名取得
var file = files[0];
選択範囲の操作
//選択範囲設定 var s_x1 = BORDER_WIDTH; var s_y1 = BORDER_WIDTH; var s_x2 = w - BORDER_WIDTH; var s_y2 = h - BORDER_WIDTH; var s_reg = [[s_x1, s_y1], [s_x2, s_y1], [s_x2, s_y2], [s_x1, s_y2]]; doc.selection.select(s_reg); doc.selection.invert(); //選択範囲反転 //選択範囲を塗りつぶす var b_color = new SolidColor(); //modelの指定をしないと、下記のfillメソッドを呼び出し時に内部エラーになる。 //変数名がRGBColorの場合は、指定しなくてもエラーにならなかった。謎。 b_color.model = ColorModel.RGB; b_color.red = 255; b_color.green = 255; b_color.blue = 20; doc.selection.fill(b_color, ColorBlendMode.NORMAL, 50, false); //選択範囲解除 doc.selection.deselect();


