PhotoShopで自動処理を行うための、JavaScript(ExtendScript)のメモです。
※ この記事は量が増えていったら分割するかもしれません。
※ Windows版 PhotoShop CS2でしか検証してないので、他のバージョンで動くかは不明。
ドキュメントの操作
ファイルパスを指定してドキュメントのオープン
1 2 3 |
//Windowsではパスの区切りは / スラッシュ。Unixっぽい指定。 //d:sampletest.phd → /d/sample/test.psd var doc = app.open("/d/sample/test.psd"); |
現在アクティブになっているドキュメント取得
1 |
var doc = app.activeDocument; |
イメージサイズの変更
1 2 3 |
//単位は既定の単位。たぶん //横500 縦400 doc.resizeImage(500, 400); |
キャンバスのサイズ変更
1 2 3 |
//単位は既定の単位。おそらく。 //横300 縦400 中央を基点 doc.resizeCanvas(300, 400, AnchorPosition.MIDDLECENTER); |
レイヤーの操作
レイヤー追加
1 2 |
//アートレイヤー追加 var newlayer = doc.artLayers.add(); |
レイヤーの取得
1 2 3 4 |
//インデックスで指定 var layer = doc.artLayers[0]; //レイヤー名で指定 var layer = doc.artLayers("layer name"); |
レイヤーの種類変更
1 2 |
//テキストレイヤーにする newlayer.kind = LayerKind.TEXT; |
レイヤースタイル設定
1 2 |
//スタイル名はPhotoShop側でスクリプト実行前にあらかじめ作っておく newlayer.applyStyle("layer_style_name"); |
メタデータの設定
1 2 3 4 5 6 7 8 9 10 |
//ここで入れたデータは書類情報??プロパティ?に入る //著者名 doc.info.author = "author name"; //所有者のURL doc.info.ownerUrl = "http://www.exsample.com"; //著作権情報 doc.info.copyrighted = CopyrightedType.COPYRIGHTEDWORK; |
テキストの操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
//レイヤー追加 //テキストレイヤーは空のレイヤーしか作れない 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形式で保存する(メニューの ファイル→別名保存と同じ)
カラーチャンネルを変更する
1 2 3 4 |
//カラーチャンネルを8bitにする(カラーチャンネルが16bit以上の場合) //JPEGは24ビットまでしか扱えない。8bit*RGBの3チャンネルで24bit //保存時に自動的に変換...というのはないみたい doc.bitsPerChannel = BitsPerChannelType.EIGHT; |
jpg保存オプション設定
1 2 3 4 5 6 7 8 9 10 11 12 13 |
jpegOpt = new JPEGSaveOptions(); //カラープロファイルを埋め込むか jpegOpt.embedColorProfile = false; //画質(1~12 デフォルトは3 大きいほど高品質) jpegOpt.quality = 7; //ベースライン・プログレッシブの指定 jpegOpt.formatOptions = FormatOptions.STANDARDBASELINE; //マットタイプの指定....これはよくわからない pegOpt.matte = MatteType.WHITE; |
Web用に保存する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//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); |
フォルダの操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var dir = new Folder(IN_DIR); //フォルダの存在確認 if(dir.exists){ //フォルダ有 } //指定フォルダ以下のファイルリストを取得 //フィルタ指定も可能 var files = dir.getFiles("*.psd"); //フォルダ以下のファイル数取得 var filecnt = files.length; //1つめのファイル名取得 var file = files[0]; |
選択範囲の操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//選択範囲設定 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(); |