クリエイター手抜きプロジェクト[470]Adobe Photoshop CS6〜CC 2015編 縦横の長い辺に合わせて正方形にする/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,200文字)



今回は、2005年7月に掲載してあったスクリプトの修正版です。もう10年以上前のスクリプトになり、当時はPhotoshop CS版として作成したものです。

・画像の縦横比に合わせてキャンバスサイズを調整する
http://www.openspc2.org/projectX/Photoshop/0016/index.html

このスクリプトを現在のバージョンで実行すると、最初の実行で失敗したり、なぜか期待通りに動作しないことがあります。これをPhotohop CS6以降でも動作するようにしたのが、以下のスクリプトです。




// 縦横の長い辺に合わせて正方形にする
(function(){
var folderRef = Folder.selectDialog("変換元のフォルダを選択してください");
if (!folderRef){ return; }
var saveFolder = Folder.selectDialog("変換した画像を保存するフォルダを選択してください");
if (!saveFolder){ return; }
var fileList = folderRef.getFiles("*.jpg");
var jpegOpt = new JPEGSaveOptions();
jpegOpt.embedColorProfile = true;
jpegOpt.quality = 12;
jpegOpt.formatOptions = FormatOptions.PROGRESSIVE;
jpegOpt.scans = 3;
jpegOpt.matte = MatteType.NONE;

function setResize(){
var w = activeDocument.width.value;
var h = activeDocument.height.value;
if (w == h) return;
if (w > h){
activeDocument.resizeCanvas(w,w);
}else{
activeDocument.resizeCanvas(h,h);
}
}
for (var i=0; i<fileList.length; i++){
var fileRef = new File(fileList[i].fullName);
open(fileRef);
setResize();
var fileObj = new File(saveFolder.fullName+"/"+fileList[i].name);
activeDocument.saveAs(fileObj, jpegOpt, true, Extension.LOWERCASE);
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
})();

ところで、昔のスクリプトが動作しなかったのはなぜでしょうか。原因はいくつか考えられます。

まずひとつは、Photoshopそのものに原因がある可能性です。自動制御するためのJavaScriptが、安定して動作するようになったのはCS3以降です。CS3でもアプリケーション間連携には怪しい部分もありましたが、CS6になるとかなり安定して動作するようになっています。

また、同じスクリプトを実行しても、何らかの原因でエラーになることがあります。特に範囲選択のスクリプトは、突如として怪しい挙動になることがありました。

また、当時はAdobeアプリケーション間で、グローバル変数が共有されるという仕組みになっていました。以前のスクリプトは、グローバル変数を多用しているため、新しいバージョンで実行すると、その部分で挙動がおかしくなる可能性があります。

というのも、CS6など新しいバージョンでは起動時に特定のスクリプトが実行されることがあるため、その部分が干渉してしまい動作がおかしくなる可能性があります。

これはPhotoshopだけでなく、BrigdeやIllustratorなどAdobeアプリケーションを動作させた場合にも発生しうる現象です。

次に、私が作成したスクリプトにも問題があります。上記のグローバル変数の干渉によるものです。

改良したスクリプトでは、グローバル変数および関数はすべて排除し、変数も関数もローカルにしてあります。

このようにすると、他のアプリケーションや他人が作成したスクリプトと干渉しなくなります。つまり安定して動作するようになります。

また、フォルダの読み込み、保存先もパスを直接指定するのではなく、フォルダ選択ダイアログにしてあります。もちろん、完全なパスが分かれば問題ありませんが、ネットワーク接続で日本語のドライブ名やフォルダ名があると、うまく動作しない可能性もあるためです(どの方式で接続したかにもよります)。

まあ、プログラムを作ると完全なものだと思っても動作しないこともあります。運悪く解決できずに終わることもあります……。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

三年くらい前から、電気屋に買い物にほとんど行かなくなりました。買う物がないというより、量販店でも小さい電気屋でも売っていないものばかりなので、買うことができないという理由もあります。

たまに買い物に行っても、モノが売っていないので結局「アマゾンで注文」という流れになってしまいます。

特にヤマダ電機とか量販店は、もう行っても仕方がない(売ってないのが確定している)ので、一年に二回ほど買いに行けばいい方です。買いに行くときは、何かが不足していて翌日もしくは当日必要な時くらい。

逆に、とある本屋には今までと変わらず行って本を購入。すでに Web関係は皆無、二年ほど前からIoT絡みのものが多くなっていて、これも時代だなあ、と。

ということで、レトロ風味たっぷりのIchigoLatte(IchigoJam基板)+PanCakeでSEGAのGalaxy Force IIの最終ステージを少し再現。

・Galaxy Force II最終ステージ



オリジナルのGalaxy Force IIの最終ステージは、こんな感じ。

・ギャラクシーフォースII 異次元空間ハイパースペース


・IchigoLatteを楽しもう
http://www.openspc2.org/reibun/IchigoLatte/0.9.1/

・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/

・Premiere Pro & Media Encoder自動化サンプル集
http://www.amazon.co.jp/dp/4802090471/

・JavaScriptによるデータビジュアライゼーション入門
http://www.amazon.co.jp/dp/4873117461/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・Adobe JavaScriptリファレンス
http://www.amazon.co.jp/dp/B00FZEK6J6/

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/