2005年04月13日 水曜日

続・Photoshopのスクリプト機能

今日はプログラミングしてみることにする。いろいろめんどくさいので、Java Scriptで遊んでみることにする。とりあえず画像解像度を変更するプログラムなど。ダイアログボックスで縦か横を選び、サイズを入れると設定された値に応じて、サイズが変更となる。スクリプトはJava Scriptの場合「PhotoshopCS」のディレクトリの中の「プリセット」ディレクトリの中にある「スクリプト」ディレクトリに適当な名前を付けてコピーする。

// 解像度の変更(お試し版)
// 今の設定を保存
var saveRulerUnit = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
// 開いている画像の縦・横の大きさを得る
var orig_height = activeDocument.height.value;
var orig_width = activeDocument.width.value;
// 入力用ダイアログボックス
var uDlg = new Window('dialog','高さ・幅をそろえる');
uDlg.bounds = [200,200,200+300,200+300];
uDlg.rBtnHeight = uDlg.add("radiobutton",[15,10,15+100,10+20], "縦方向を揃える");
uDlg.rBtnWidth = uDlg.add("radiobutton",[15,40,15+100,40+20], "横方向を揃える");
uDlg.rBtnHeight.value = true; // 縦がデフォルト
uDlg.sText1 = uDlg.add("statictext",[15,70,15+100,70+20], "揃える大きさ(px):"); 
uDlg.ePixels = uDlg.add("edittext",[15+50,85,15+110,85+20], orig_height);
uDlg.okBtn = uDlg.add("button",[240,265,240+50,265+25], "OK", {name:"ok"});
uDlg.show();
var Pixels=parseInt(uDlg.ePixels.text);
if (uDlg.rBtnHeight.value = true){
    var current_height = Pixels;
    var current_width = orig_width * Pixels/orig_height;
}else{
    var current_height = orig_height * Pixels/orig_width;
    var current_width = Pixels;
}
// 画像の大きさを元に戻す
activeDocument.resizeImage(current_width, current_height);
// 元の設定に戻す
preferences.rulerUnits = saveRulerUnit;

こんな感じ。あと注意点はエンコードはUTF-8で保存することですか… 思ったより簡単に書けたけど、GUIを手で書くのはつらすぎる。なんかいい方法はないものか、それともMacを切ってVBScriptか…

MSから見たOpenOffice.orgが使えない理由

別にOpenOffice.orgを応援している気もないし、会社以外で表計算ソフトやワープロを見たいとも思わないので、どうでもいい話ですが…
互換性がないとかVBAが使えないとか挙げてきますか。「互換性など可視化しづらいポイントの検討が必要」ですか? 私は以前日々Excel95とExcel2000の非互換性な部分で悩んでいたんですけど。開発元が違うんだったら許容できるけど、MSさん、なんか間違ってませんか? あとファイルの互換性が云々言うのであれば、社外に文書を出すときにWordとかExcelとかつかわんでしょ。普通PDFじゃないの? PDFだっったら相手もかなりの確度で意志疎通ができることが分かっているし。
あとExcelワークシート関数のいろんな問題がExcel4時代から直されもしないという点を鑑みると、何とかしませんかMSさんと言いたいのだけども。(Rと一緒に使えばいいだけの話か。)
まぁMSさんはデベロッパの囲い方が凄く巧い会社だと思うので、いろいろ攻め口はあると思うんだけどね。