大量のテクスチャー画像を、超簡単にパターン登録する.jsx ( バッチ処理不使用

  • このエントリーをはてなブックマークに追加
  • LINEで送る

以前作ったjsxは ( Fireworksのテクスチャー画像等をPhotoshopのパターンに一括登録したい )

  1. .jsxをアクションに登録して
  2. [ファイル] – [自動処理] – [バッチ] から登録したアクションを指定

といった手順を踏む必要があったけれど今回のはバッチ処理なしでいけるはず、多分。
WindowsXPのCS3では大丈夫だった。

どういったモノ?

パターンに画像を、ファイル名で登録するだけ。
大量に登録したい時に威力を発揮するはず。

例えばこうゆう.patではないパターン画像を超簡単に一気に登録できる。
patterns: set no.7 by ~77words on deviantART

使い方

[ファイル] – [スクリプト] – [参照] から下からダウンロードしたjsxを選択する。
(xpの場合) C:\Program Files\Adobe\Adobe Photoshop CS3\プリセット\スクリプト の中に.jsxを入れておけば[ファイル] – [スクリプト] から使用できる。

ExtendScript Toolkitからも使える。

ダウンロード

[js]// ==========
// File Name: addPattern.jsx
// File URI: http://sakurachiro.com/_exercise/javascript/jsx/addPattern.jsx
// Description: 画像をパターンに一括登録する
// Author: makoto
// Version: 1.0.0
// Author URI: http://blog.sakurachiro.com/
// Copyright: Copyright 2010 makoto
// ==========

textureFolderObj = Folder.selectDialog("パターンに登録したい画像があるフォルダを選択してください");
if (textureFolderObj) {
fileSet(textureFolderObj);
}

function fileSet(textureFolderObj) {
var textureFileList = textureFolderObj.getFiles();
for (var i = 0; i < textureFileList.length; i++) {
var textureFileObj = textureFileList[i];
if (textureFileObj.name.indexOf(".") < 0) {
//拡張子がなければフォルダと判断
fileSet(textureFileObj);
} else if (textureFileObj.name.match(/.png|.jpg|.jpeg|.gif/g)) {
//正規表現に自信はないけど動いているようだ
addTexture(textureFileObj);
}
}
}

function addTexture(textureFileObj) {
open(new File(textureFileObj));

// ==========
// 登録する
// ==========
var idMk = charIDToTypeID("Mk ");
var desc1 = new ActionDescriptor();
var idNull = charIDToTypeID("null");
var ref1 = new ActionReference();
var myPtrn = charIDToTypeID("Ptrn");
ref1.putClass(myPtrn);
desc1.putReference(idNull, ref1);
var idUsng = charIDToTypeID("Usng");
var ref2 = new ActionReference();
var idPrpr = charIDToTypeID("Prpr");
var idFsel = charIDToTypeID("fsel");
ref2.putProperty(idPrpr, idFsel);
var idDcmn = charIDToTypeID("Dcmn");
var idOrdn = charIDToTypeID("Ordn");
var idTrgt = charIDToTypeID("Trgt");
ref2.putEnumerated(idDcmn, idOrdn, idTrgt);
desc1.putReference(idUsng, ref2);
var idNm = charIDToTypeID("Nm ");
var docName = app.activeDocument.name;
desc1.putString(idNm, docName);
executeAction(idMk, desc1, DialogModes.NO);

// ==========
// 閉じる
// ==========
var idCls = charIDToTypeID("Cls ");
executeAction(idCls, undefined, DialogModes.NO);
}
[/js]

今回詰まったところ

バッチにある「サブフォルダをすべて含める」をjsxでどうやって書いていいのかがさっぱりだった。

こんな風に書いて、
[js]var myFolder = Folder.selectDialog("フォルダを選択");
var myFiles = myFolder.getFiles();
for(i=0;i<myFiles.length;i++){
alert(myFiles.length);
}
[/js]
下記画像ような中身のフォルダを選択すると、困った事にmyFiles.lengthは7になる。
選択したフォルダの中身の例

そんな時とても参考になったページ

IllustratorとPhotoshopのファイル名埋め込み
IllustratorとPhotoshopのファイル名埋め込み – for iPhone

ExtendScript Toolkitを使ってみたんだけど
ちゃんと書けていたのに「対象アプリケーションを選択」でPhotoshopを選んでいなかった為、いつまでもopenが関数ではありません等のエラーが出て動かず途方に暮れた。
ExtendScript Toolkit 2、対象アプリケーションを選択
ちゃんとadobe photoshop cs3を選択しなければ。

  • このエントリーをはてなブックマークに追加
  • LINEで送る

SNSでもご購読できます。

コメント

  1. くうふう より:

コメントを残す


You can add images to your comment by clicking here.