2013年6月16日日曜日

マスクレイヤーをランダムにして、順を追ってパラパラ漫画風の画像が書き出せるjsxかいた(photoshop用)

色々とわけあって、日曜プログラマをしました。
とはいってもjsxで、そんな重たいものでもないのですが。。

【概要】
用途は、psdでパズルのようなマスクのレイヤーを作成して、それを順をおってpngに書きだしていくようなものです。

例えば10ピースのマスクレイヤーを作成したら、
1のレイヤーマスク書き出しpng

1と2のレイヤーマスク書き出しpng

1と2と3のレイヤーマスク書き出しpng
↓↓
↓↓
1~10のレイヤーマスク書き出しpng

が作成されて、パラパラ漫画風アニメーションができるというわけです。

【使い方】
例によって、以下ソースをjsxで保存。
ソースのコピーは、syntaxHighliter上でコードをダブルクリックしてください。
■win
C:¥Program Files¥Adobe¥Adobe Photoshop CS3¥プリセット¥スクリプト¥
■mac
/Applications/Adobe Photoshop CS3/プリセット/スクリプト/
にjsxファイルをつっこんで、photoshopを起動。

■!!注意点
"itao_パズルの書き出し"は破壊的なので、必ずそのレイヤーセットのバックアップをとっておいてください。
対象レイヤーセットを選択して
ファイル > スクリプト > "itao_パズルマスクのランダム(※jsxのファイル名になります)"
ファイル > スクリプト > "itao_パズルの書き出し(※jsxのファイル名になります)"

【その他】
今回利用するのがpng24だったので、それ以外の書き出しはせっていしていません(´ρ`)
これつかってなにか起きても責任はおえないので、それでもいいよって方もしくはソース眺めるのみに利用してくださいませ(´ρ`)
ランダムのうまい書き方をしらないので、フォークしてくれるお方、またjsx系で良い感じの技術があって教えていただける心優しいおかたがいらっしゃればとってもうれしいです!

 
var BASE_NAME = "base";

var puzzuleApp = function(){};
puzzuleApp.prototype = {

 allLayerShuffle : function(){
  var 
  _dName = activeDocument.activeLayer.name,
  _dObjects = activeDocument.layerSets[_dName],
  _dObjectsLength = _dObjects.artLayers.length
  ;

  _dObjects.layers[BASE_NAME].move(_dObjects , ElementPlacement.PLACEAFTER);
  for (var i = 0 ; i < _dObjectsLength ; i += 1){
   var 
   _rnd = Math.floor(Math.random() * (_dObjectsLength - 1)),
   _rnd2 = Math.floor(Math.random() * 2)
   ; 

   if(_rnd2 == 0){
    //一番上へ
    _dObjects.layers[_rnd].move(_dObjects , ElementPlacement.PLACEATBEGINNING);
   }else if(_rnd2 == 1){
    //一番下へ
    _dObjects.layers[_rnd].move(_dObjects , ElementPlacement.PLACEATBEGINNING);
   }else{
    //そのまま
    //
   } 
  }

  //細かい処理
  //baseレイヤーを一番上へ
  activeDocument.artLayers[BASE_NAME].move(_dObjects , ElementPlacement.PLACEATBEGINNING);
  //並び順を番号順にしなくていいか

 }
}

var myObj = new puzzuleApp ();
myObj.allLayerShuffle();

 
/* ▼めも▼ */
/*
activeDocument : 開いているpsdファイル
activeDocument.activeLayer : 選択しているレイヤーのオブジェクト
activeDocument.LayerSets["String"] : 開いているドキュメントのレイヤーセットオブジェクト
*/
/* ▲めも▲ */

//
//定数
//
var BASE_NAME = "base";
var SAVETYPE_PNG24 = "png24";


//
//処理
//
var itaoGlobalObject = function(){};
itaoGlobalObject.prototype = {
 getSaveDialogPath : function(){
  var 
  _folderName,
  _folderObj,
  _folderPath
  ;

  _folderName = Folder.selectDialog("保存するフォルダを選択してください");
  _folderObj = new File(_folderName);
  _saveFolderPath = _folderObj.fsName;

  return _saveFolderPath;
 },
 savePng : function(path, name, bit){
  var 
  _exp = new ExportOptionsSaveForWeb(),
  _fileObj
  ;
  _exp.format = SaveDocumentType.PNG;
  _exp.interlaced = false;

  if(bit == 8){
   _exp.PNG8 = true;
  }else{
   _exp.PNG8 = false;
  }
  _fileObj = new File(path + name + ".png", "png");
  activeDocument.exportDocument(_fileObj, ExportType.SAVEFORWEB, _exp);
 }
};



var puzzuleApp = function(v){
 this.myGlobal = v.gObj;
 this.saveDir = this.myGlobal.getSaveDialogPath();
};

puzzuleApp.prototype = {

 allLayerSave : function(v){
  //最後のアウトプット
  var 
  _dName = activeDocument.activeLayer.name,
  _dObjects = activeDocument.layerSets[_dName],
  _dObjectsLength = _dObjects.artLayers.length,
  _saveType = v.saveType
  ;

  if(this.saveDir != "/null"){
   for(var j = 0 ; j < _dObjectsLength ; j += 1){
    //初回のみ一度すべて非表示
    _dObjects.layers[j].visible = false;
   }
   _dObjects.layers[BASE_NAME].visible = true;
   _dObjects.layers[1].visible = true;


   for (var i = 1 ; i < _dObjectsLength ; i += 1){
    //1,forで回ってきたマスクレイヤーを下のレイヤーと統合してbaseをクリッピングマスクかける(初回のみ統合しない)
    //2,対象を保存する

    if(i != 1){
     var _tmpName = _dObjects.layers[2].name;
     _dObjects.layers[2].visible = true;
     _dObjects.layers[1].merge();
     _dObjects.layers[1].name = _tmpName;
    }

    _dObjects.layers[BASE_NAME].grouped = true;

    if(_saveType == SAVETYPE_PNG24){
     // this.myGlobal.savePng(this.saveDir + "/" , _dObjects.layers[1].name , _saveType);
     this.myGlobal.savePng(this.saveDir + "/" , i , _saveType);
    }else{
     alert("保存形式未対応");
    }

    _dObjects.layers[BASE_NAME].grouped = false;
   }
  }else{
   alert("保存先がみつかりません。なのでキャンセルします");
  }
  
 }
}


//
//実行開始
//
var  
myG = new itaoGlobalObject();
myObj = new puzzuleApp ({gObj : myG})
;

myObj.allLayerSave({saveType : SAVETYPE_PNG24});

2012年7月25日水曜日

HTML5のテキストとcanvasなど

キーボードから入力した文字を回転、移動というシチュエーションがありそうだったので、テストコードを書いてみました。

canvasの使い方、慣れるまでなかなか時間かかりそうです。
Flashでやれば本当にすぐなんだが、という想いが頭をよぎったりしてしまいます。。
ドラッグ&ドロップの実装は、jQuery uiで一発、とても便利ですね。
DOM操作自体は好きなので、慣れですね。

2012年7月21日土曜日

jsdo.it登録してみた

今更ながら、jsdo.itでhtml5の勉強しようかと思ってやってみた。


コード貼れてプレビューまで簡単にできるのは、ホント便利!
欲を言えば、簡単なのでいいから補完が欲しい。
ない状態で、ただでさえ冗長なcanvasコーディングはちょっとツライかな。
cs6のFlashからhtml5へのコンバートCreateJSの開発、今度はw止まらずに進んでくれると開発速度的にすごい助かりそうですね。

iPhone法人デベロッパー登録でDUNSナンバーが必須?

iPhone developer法人登録の方法が変わったというこちら読んでdeveloper申し込みページ見てみたら変わってる?

こんな記述ありましたっけ??
本当ならますます、敷居が高くなりましたね。
今までは、エンタープライズ版のみ必要だったDUNS。
謎のDUNS取得方法、期間少し調べてみました。

<DUNS(ダンズ)>
DUNS(Data Universal Numbering System)は、アメリカの ダンアンドブラッドストリート(D&B)が管理している、企業コードの付与管理システム、並びに同システムによって各企業に付与された企業コードの名称。「DUNS」は「ダンズ」と読む。文書によってはD-U-N-SあるいはDUNSナンバーと表記することもある。 本項では区別のため、以下企業コード管理システムを指す場合はDUNS、企業コード自体を指す場合はDUNSナンバーと表記する。
出典:wikipedia

要するに企業の一元コード管理システムってことですね。
日本の企業って、普通もっているものなのでしょうか?
大手で働いたことがないのでよくわからん。

取得場所はこちら
証明書付きで¥10,500ほど。
取得期間は、登記簿謄本到着後3営業日。
なので、企業にやってもらうとしたら、2週間ほど見積もらないとだめそうですね。
リリースプレスを打つアプリで、かつアカウント持っていないクライアントとの仕事の際は要注意です。

参考サイト

Facebook App AWARDS

facebook開発者サポートの雄fb.developers'+さん企画のfacebookアプリのコンペにチャレンジしてみることにしました。
僕の担当はプログラムで、前に勤めていた会社の先輩デザイナーをパートナーとして頑張ってみます。
8/31までの少ない時間をうまく使いながら、面白いもの作りたいな。

Blogger + SyntaxHighlighter

SyntaxHighlighterをあててみた。

 
 console.log("hoge");
参考サイト

2012年1月23日月曜日

株式会社エウレカで仕事を始めます

株式会社エウレカ
http://eure.jp/

とてつもなく若い会社で、平均年齢20代前半です。
場所は白金高輪で、オフィスは広め。
若い子に刺激を受けながら、成長していきたいと思っています。

2012年1月23日
伊藤 悠太