WITHOUT THOUGHT Vol.8を見てきた

深沢直人がデザインディレクターをやっているWITHOUT THOUGHTを見にle bainまで行ってきた。「COSME CHIPS」とか良かったなー。でも、各作品の完成度に差があったのがちょっと気になった。

深沢直人がデザインディレクターをやっているWITHOUT THOUGHTを見にle bainまで行ってきた。「COSME CHIPS」とか良かったなー。でも、各作品の完成度に差があったのがちょっと気になった。
PHPでサムネイルを作ってみる。まずは「image」、「thumb」フォルダを作る。photoフォルダにtest.jpgをアップロードしておく。下記のコードでは元画像のサイズを3872×2592、サムネイルのサイズを120×80とする。クオリティを0~100で好みに調整する。(100にしないと画像がざらつく)
あとはこのPHPにアクセスするだけでサムネイルを生成してくれる。アップロード用のPHPにこういった処理を持たせてやると自作フォトログの画像管理が楽になるな。Flashでフォトログのインターフェイス作るよりも、こういった機能周りのコード書くほうが楽しくなってきた。
今までフィードの購読をするときはアドレスバーの右端のフィードアイコンをクリックして「iGoogle」か「GoogleReader」に登録するかを選択することが出来た。なのに最近になって「iGoogle」にしか登録できなくなってるし。激しく不便に感じて調べてたらBetter GReaderというアドオンを見つけた。
これはフィードを公開しているページを表示すると右上にフィードアイコンが出てきて、1クリックでリーダーを呼び出してくれる。そのままSubscribeボタンを押下するとリーダーに登録される。なかなか便利。すでに購読している場合はアイコンにチェックマークが入るので重複購読を防げるという芸の細かさ。
アドオンの設定で「Optimized Skin」にチェックを入れるとリーダー内の表示が崩れるのでチェックを外す。「Quick Links」にチェックを入れるとdel.icio.usとかに登録するボタンが表示される。「Smart Subscribe」にチェックを入れるとリーダーに一発登録できるフィードアイコンが右上に表示される。
思った以上に簡単にカメラ機種や撮影時間などのメタデータを取得できた。flickrを使うと自動的にExif情報をゲットできるみたいだけど、自作でフォトビューワーとか作りたい人(自分)のために。以下のExifAll.phpでExif情報の一覧を取得可能。ちなみにデジカメで撮った画像をフォトショで「Web用に保存」してしまうとExif情報が削除されるので注意が必要。
ExifAll.php
続いて欲しい情報だけを取り出すソース。
ExifSelect.php
COMPUTED、THUMBNAILおよびCOMMENTのセクションは常に配列となるため、それに合わせる為にexif_read_data()の第3引数を1にする。これで全てのセクションと値を配列として格納するため、2次元配列のカタチで取得できるようになる。詳しくはこちらを参照。
※セクション名の付け方は各メーカーによって異なるようです。上記のソースはNikonのD80で撮影した画像のExif情報を元にしています。他メーカーの場合は一覧を取得するExifAll.phpでセクション名を確認してください。
通常はsendAndLoadを使うけど、CASAを使うともっと手軽に出来ます。new VarsLoad()の第1引数でPHPのパスを指定し、第2引数で「GET」か「POST」の送信方法を指定する。myVarsLoad.setValue("text", "Hello World");でPHPに渡したい値を指定する。第1引数が変数名で第2引数が値になる。
PHPからの返り値を受け取るにはコンプリートハンドラーの中でthis.myVarsLoad.getValue("text")とすればよい。この場合の引数はPHPから返ってくる変数名を指定する。ちなみにPHPからの返り値を全て見たいときはtrace(this.myVarsLoad.$receive)とすればよい。さらにPHPから返ってくるオブジェクトそのものを見たいときは前回のエントリーでも書いたObjectDumper.toString()メソッドを使うと一発で理解できる。trace(ObjectDumper.toString(myVarsLoad, true, true));とすれば中身が丸見え。
CASA使うとコード量が格段に減ってすっきりするので気持ちよい。
//-----[初期設定]
var myVarsLoad:VarsLoad;
//-----[ボタンクリックでPHPと通信]
btn.onRelease = function()
{
myVarsLoad = new VarsLoad("やりとりしたいPHPのパス", "GET");
myVarsLoad.addEventObserver(_root, VarsLoad.EVENT_LOAD_COMPLETE, "onDataLoad");
myVarsLoad.setValue("text", "Hello World");
myVarsLoad.start();
}
//-----[ロード完了]
function onDataLoad(sender:VarsLoad):Void
{
trace(this.myVarsLoad.getValue("text"));
}
8/12に東京てら子が開催されることになりました。ものすごいメンバーが集まるのでかなり期待です。Flashの勉強会にちょこちょこ顔を出すようになって、少しづつ繋がりができてきたなぁと実感。当日皆様のお越しをお待ちしております。
Appleに対抗してか、UI重視のコンセプトモデル3種が発表された。確かに尖ってるけど、正直どうなのかな。iPhoneみたいな衝撃はないなぁと。カタチがどれも見たことあるし。携帯はもっともっとシンプルで良いと思う。
ロシアのトイカメラLOMOで撮影したような効果を与えるフィルターを作ってみた。全体的にハイコントラストにして四隅が暗くなるように調整。勝手にロモフィルターと命名することに。
LomoFilter.as
class info.five.as2.filters.LomoFilter
{
function LomoFilter()
{
trace("LomoFilterクラスの読込完了");
}
//------------------------------
// LomoFilterセット関数
// mc:ムービークリップ
// vol:ボリューム(1.0~2.0)
//------------------------------
function setLomoFilter(mc:MovieClip, vol:Number)
{
mc.createEmptyMovieClip("lomo", mc.getNextHighestDepth());
mc.lomo.blendMode = "overlay";
with(mc.lomo)
{
fillType = "radial";
colors = [0x000000, 0x000000, 0x000000];
alphas = [0, 50, 100];
ratios = [0, 200, 255];
spreadMethod = "pad";
interpolationMethod = "RGB";
focalPointRatio = 0;
matrix = new Matrix();
matrix.createGradientBox(mc._width*vol, mc._height*vol, 0, (mc._width-mc._width*vol)/2, (mc._height-mc._height*vol)/2);
beginGradientFill(fillType, colors, alphas, ratios, matrix, spreadMethod, interpolationMethod, focalPointRatio);
moveTo(0, 0);
lineTo(0, mc._height);
lineTo(mc._width, mc._height);
lineTo(mc._width, 0);
lineTo(0, 0);
endFill();
}
}
}
flaの1フレーム目に以下のコードを書く。
var lomo:LomoFilter = new LomoFilter();
lomo.setLomoFilter(thumb1, 1.4);
lomo.setLomoFilter(thumb2, 1.4);
lomo.setLomoFilter(thumb3, 1.4);
lomo.setLomoFilter(thumb4, 1.4);
setLomoFilter()の第1引数はmcのインスタンス名。第2引数はフィルター量になってます。(1.0~2.0くらいで)もうちょっとぼけ具合とかピンホールとか色々弄りたかったけど、やりすぎない程度にしてみました。
確かにちょっと早くなった。