Illustratorスクリプト 09/12/08

取引先から送られてくるイラレのデータが、いっつもベクターベースの処理で、小数点以下を使用したデータで送られてくる。


これだと、ラスター化(例えばフォトショに持っていく)したときに、意図しないアンチなどがかかって気持ち悪いので作成。


選択したオブジェクトの、XY値&width,height値を小数点以下四捨五入する。width,heightに関しては任意で好きな値も入れられる。
しっかし、GUIが作りにくいなぁ。

//GUI作成
uDlg = new Window('dialog','位置、サイズ調整Tool',[400,400,620,550]);
checkBtn1 = uDlg.add("checkbox", [5, 10, 200, 20], "X,Y値(auto)");
checkBtn2 = uDlg.add("checkbox", [5, 30, 200, 40], "width, height値");
checkBtn3 = uDlg.add("checkbox", [15, 45, 210, 55], "auto");
widthText = uDlg.add("statictext", [15, 62, 40, 80], "width");
widthFiled = uDlg.add("edittext", [45, 60, 100, 80], "");
heightText = uDlg.add("statictext", [110, 62, 135, 80], "height");
heightFiled = uDlg.add("edittext", [140, 60, 195, 80], "");
btn1 = uDlg.add("button",[20,110,100,130], "実行");
btn2 = uDlg.add("button",[120,110,200,130], "キャンセル");

//GUI初期化
checkBtn1.value = true;
checkBtn2.value = false;
checkBtn3.value = true;
checkBtn3.enabled = false;
widthText.enabled = false;
widthFiled.enabled = false;
heightText.enabled = false;
heightFiled.enabled = false;

//GUI設定変更実装
checkBtn2.onClick = function(){
    if(checkBtn2.value){
        if(checkBtn3.value){
            checkBtn3.enabled = true;
            widthText.enabled = false;
            widthFiled.enabled = false;
            heightText.enabled = false;
            heightFiled.enabled = false;
        }else{
            checkBtn3.enabled = true;
            widthText.enabled = true;
            widthFiled.enabled = true;
            heightText.enabled = true;
            heightFiled.enabled = true;
        }
    }else{
        checkBtn3.enabled = false;
        widthText.enabled = false;
        widthFiled.enabled = false;
        heightText.enabled = false;
        heightFiled.enabled = false;
    }
}

checkBtn3.onClick = function(){
    if(checkBtn3.value){
            checkBtn3.enabled = true;
            widthText.enabled = false;
            widthFiled.enabled = false;
            heightText.enabled = false;
            heightFiled.enabled = false;
    }else{
            checkBtn3.enabled = true;
            widthText.enabled = true;
            widthFiled.enabled = true;
            heightText.enabled = true;
            heightFiled.enabled = true;
    }
}



//実処理実装
btn1.onClick = function(){

    selObjects = app.selection;
    
    if(checkBtn1.value){

        //X, Y値処理
        for(i = 0; i < selObjects.length; i++){

            position = selObjects[i].position;

            x = Math.round(position[0]);
            y = Math.round(position[1]);

            selObjects[i].position = Array(x, y);
        }
    }

    if(checkBtn2.value){

        //width, height値処理
        if(checkBtn3.value){    //auto
            for(i = 0; i < selObjects.length; i++){
                selObjects[i].width = Math.round(selObjects[i].width);
                selObjects[i].height = Math.round(selObjects[i].height);
            }
        }else{                  //任意
                for(i = 0; i < selObjects.length; i++){
                    selObjects[i].width = widthFiled.text;
                    selObjects[i].height = heightFiled.text;
                }
        }
    }

    uDlg.close();
    alert("完了");
}

//キャンセル処理
btn2.onClick = function(){

    uDlg.close();

}

//表示
uDlg.show();

iPhone Developer Programについて。

えー、このAppleIDの2バイトコードによる問題(アクティベーションが出来ない)に関しては、他のサイトでもイロイロと論じられてるので前後の作業手順などに関してはそちらに譲るが・・・


今回(2009/11)、実際にやってみての結果だけ報告します。


成功するのはムリ!!
素直に失敗して、サポートへメールを打ちましょう!
日本語でも大丈夫だからさ。


しかし、アホだ。

NSStringとNSMutableString

また、小1時間ほどハマりました。

まず、やったのは以下のコード。

NSMutableString* str = @"hoge";
[str setString: @"naunau"];

これで実行時にエラーが出ます。
しかし、コンパイルエラー(シンタックス)が出ないのでなかなか気づかない。

問題はコレ
@"hoge"
このこは文字列定数で、NSStringなのだそうです。NSMutableString型に代入できちゃうもんだから気づかない!
2行目で実行しているstrオブジェクトはNSString型で、setStringメソッドを実装していないのでエラーになっていた模様。

わかりずらい。。。

いまさら気づく、javascriptのワナ!!

なんとー!

これは、初心者の足元を見事にすくう罠!!!
おそろしやwebの世界、クロスブラウザなど例外に次ぐ例外の嵐。
まったくもって習得する気がうせる。。。

style sheetでは

#hoge {
    color: red;
    background-color: #555555;
}

なのに、javascriptで記述の際は

function hoge(){
    document.getElementById("hoge").style.backgroundColor = "#555555";
}

などど、間にハイフン(−)が入っているものは取り除いて次の単語の頭を大文字にしなきゃならん。
けしからん。

xampplite + mtos

えー、またまたmt必要でHDD汚すのヤだから今回はxamppliteに
したらまたハマったorz
で、備忘録ね!

xampplite入れたら、"setup_xampp.bat"実行。
そんでmtosを展開して、*.cgiの1行目のperlパスを変更。
で、
perlアドオン
をxamppフォルダに上書き!!

メンドーだから、超省略書き。後から見たらわかんない(爆)

近況

ども、redtaxiです。

気がつけば、1ヶ月以上書き込みしてないorz
仕事のヤマが押し寄せてまして、、、って書くと終わったみたい
ですが、、、まだ押し寄せてます。
このまま7月末まで。トホホ

見ると、参考にさせていただいたサイトの方からトラックバック
いただいたりしています。ちなみにトラックバックの事、なんとなく
しか分かってないredtaxiです。
ありがとうございます。

久々に書き込んだのはワケがあり。
仕事でActionScriptの備忘録かかないと、忘れてしまいそうな
ことがいっぱい!!
removeMovieClipの仕様とか・・・???・・・とか?
す、すでに何書くか忘れてる。
なるべく早くまとめましょう>自分

8bitカラーのBMP画像のカラーパレット操作(python PIL)。

某お仕事で、今後必要になるであろう。
前回↓
photoshop:減色処理をバッチとjavascriptで実現。 - redtaxi d-side
の延長のお話。


今回は、8bitカラー(インデックスカラー)のbmp画像のカラーパレットを編集したいというお話。
特に、透過指定色に使われているある色をカラーパレット内にて移動(最初に持ってくる)する。

まず、pythonで画像いぢくるとなるとコイツ↓PIL
Python Imaging Library (PIL)


基本の使い方。

import Image
import ImagePalette

#まずは対象ファイルオープン
img = Image.open("D:\work\xxx\xxx.bmp")
#表示(必要ないけど・・・)
img.show()

#カラーパレット取得
palette = img.getpalette()   #RGB値のリストで返ってきます。
#ここからこのリストの順番やRGB値をいぢって。。。
#戻す!
img.putpalette(np)

#このままだと、実際のデータのカラー指定がズレてるので、
#パレットの移動にあわせて、実データもずらす。
#まずは、データの取得。
data = list(img.getdata())  #リストで指定パレット番号が返る。
#指定パレット番号をいぢって戻す!
img.putdata(data)
#保存
img.save("D:\work\xxx\xxx.bmp")


このあたり↓が参考になりました。感謝。
PILでGBA with Python - 神様なんて信じない僕らのために