2007.09.03
category
comments

WITHOUT THOUGHT Vol.8を見てきた

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

2007.08.27
category
comments

サムネイルを生成してみる

PHPでサムネイルを作ってみる。まずは「image」、「thumb」フォルダを作る。photoフォルダにtest.jpgをアップロードしておく。下記のコードでは元画像のサイズを3872×2592、サムネイルのサイズを120×80とする。クオリティを0~100で好みに調整する。(100にしないと画像がざらつく)

あとはこのPHPにアクセスするだけでサムネイルを生成してくれる。アップロード用のPHPにこういった処理を持たせてやると自作フォトログの画像管理が楽になるな。Flashでフォトログのインターフェイス作るよりも、こういった機能周りのコード書くほうが楽しくなってきた。

PHP:
<?php
    $imagePath = "image/";
    $thumbPath = "thumb/";
    $imageName = "test.jpg";
    $imageW = 3872;
    $imageH = 2592;
    $thumbW = 120;
    $thumbH = 80;
    $quality = 100; //jpgの保存品質(0-100)
    $photo = @imagecreatefromjpeg($imagePath.$imageName);
   
    if($photo)
    {
        //-----[サムネイルの領域確保]
        $thumb = imagecreatetruecolor($thumbW, $thumbH);
       
        //-----[画像をリサイズ]
        $result = imagecopyresampled($thumb, $photo, 0, 0, 0, 0, $thumbW, $thumbH, $imageW, $imageH);
       
        //-----[jpgファイルに保存]
        imagejpeg($thumb, $thumbPath.$imageName, $quality);
       
        //-----[メモリの解放]
        imagedestroy($thumb);
        imagedestroy($photo);
       
        echo "<a href=\"$imagePath$imageName\"><img src=\"$thumbPath$imageName\" alt=\"サムネイル\" />";
    }
    else
    {
        echo "画像読み込みエラー";
    }
?>

2007.08.24
category
comments

googleリーダーの仕様が変わった?

今までフィードの購読をするときはアドレスバーの右端のフィードアイコンをクリックして「iGoogle」か「GoogleReader」に登録するかを選択することが出来た。なのに最近になって「iGoogle」にしか登録できなくなってるし。激しく不便に感じて調べてたらBetter GReaderというアドオンを見つけた。

これはフィードを公開しているページを表示すると右上にフィードアイコンが出てきて、1クリックでリーダーを呼び出してくれる。そのままSubscribeボタンを押下するとリーダーに登録される。なかなか便利。すでに購読している場合はアイコンにチェックマークが入るので重複購読を防げるという芸の細かさ。

アドオンの設定で「Optimized Skin」にチェックを入れるとリーダー内の表示が崩れるのでチェックを外す。「Quick Links」にチェックを入れるとdel.icio.usとかに登録するボタンが表示される。「Smart Subscribe」にチェックを入れるとリーダーに一発登録できるフィードアイコンが右上に表示される。

2007.08.22
category
comments

PHPでExif情報を取得

思った以上に簡単にカメラ機種や撮影時間などのメタデータを取得できた。flickrを使うと自動的にExif情報をゲットできるみたいだけど、自作でフォトビューワーとか作りたい人(自分)のために。以下のExifAll.phpでExif情報の一覧を取得可能。ちなみにデジカメで撮った画像をフォトショで「Web用に保存」してしまうとExif情報が削除されるので注意が必要。

ExifAll.php

PHP:
<?php
    $exif = exif_read_data('img/test.jpg', 0, true);
   
    foreach ($exif as $key => $section)
    {
        foreach ($section as $name => $val)
        {
            echo "$key.$name: $val<br />\n";
        }
    }
?>

続いて欲しい情報だけを取り出すソース。

ExifSelect.php

PHP:
<?php
    $exif = exif_read_data('img/test.jpg', 'IFD0', 1, true);
   
    echo "Make = ".$exif['IFD0']['Make']."<br />\n";
    echo "Model = ".$exif['IFD0']['Model']."<br />\n";
    echo "ExposureTime = ".$exif['EXIF']['ExposureTime']."<br />\n";
    echo "ApertureFNumber = ".$exif['COMPUTED']['ApertureFNumber']."<br />\n";
    echo "ISOSpeedRatings = ".$exif['EXIF']['ISOSpeedRatings']."<br />\n";
    echo "DateTimeOriginal = ".$exif['EXIF']['DateTimeOriginal']."<br />\n";
    echo "ExposureBiasValue = ".$exif['EXIF']['ExposureBiasValue']."<br />\n";
    echo "ExifImageWidth = ".$exif['EXIF']['ExifImageWidth']."<br />\n";
    echo "ExifImageLength = ".$exif['EXIF']['ExifImageLength']."<br />\n";
    echo "WhiteBalance = ".$exif['EXIF']['WhiteBalance']."<br />\n";
    echo "DigitalZoomRatio = ".$exif['EXIF']['DigitalZoomRatio']."<br />\n";
?>

COMPUTED、THUMBNAILおよびCOMMENTのセクションは常に配列となるため、それに合わせる為にexif_read_data()の第3引数を1にする。これで全てのセクションと値を配列として格納するため、2次元配列のカタチで取得できるようになる。詳しくはこちらを参照。

※セクション名の付け方は各メーカーによって異なるようです。上記のソースはNikonのD80で撮影した画像のExif情報を元にしています。他メーカーの場合は一覧を取得するExifAll.phpでセクション名を確認してください。

2007.08.22
category
comments

福岡でダカフェ写真展を見る

dsc_0168.jpg
お盆に福岡に帰ったとき、ちょうどダカフェ日記広松木工家具の展示をやってた。写真も家具も本当に良かった。木枠の風合いが写真とマッチしてて、かなり素敵だった。本の印刷も色がしっかり出てて好きだったけど、展示写真のように大きく引き伸ばして見せられると思わず見入ってしまうほど。家具のほうは座椅子とかシェルフとか結構ぐっと来るものがあって、次に引っ越すときは色々買いたいなぁと。値段もすごい。

2007年7月14日(土)~9月2日(日) 11:00~20:00
BiVi福岡にて

2007.08.03
category
comments

CASAを使って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使うとコード量が格段に減ってすっきりするので気持ちよい。

ACTIONSCRIPT:
import org.casaframework.load.data.VarsLoad;

//-----[初期設定]
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"));
}

2007.08.01
category
comments

Sparkてら子 勉強会

8/12に東京てら子が開催されることになりました。ものすごいメンバーが集まるのでかなり期待です。Flashの勉強会にちょこちょこ顔を出すようになって、少しづつ繋がりができてきたなぁと実感。当日皆様のお越しをお待ちしております。

2007.08.01
category
comments

au 新コンセプトモデル

Appleに対抗してか、UI重視のコンセプトモデル3種が発表された。確かに尖ってるけど、正直どうなのかな。iPhoneみたいな衝撃はないなぁと。カタチがどれも見たことあるし。携帯はもっともっとシンプルで良いと思う。

2007.07.31
category
comments

ロモフィルター

ロシアのトイカメラLOMOで撮影したような効果を与えるフィルターを作ってみた。全体的にハイコントラストにして四隅が暗くなるように調整。勝手にロモフィルターと命名することに。

LomoFilter.as

ACTIONSCRIPT:
import flash.geom.Matrix;

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フレーム目に以下のコードを書く。

ACTIONSCRIPT:
import info.five.as2.filters.LomoFilter;

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くらいで)もうちょっとぼけ具合とかピンホールとか色々弄りたかったけど、やりすぎない程度にしてみました。

2007.07.27
category
comments

Gmailを高速にするTips

確かにちょっと早くなった。

http://google-mania.net/archives/495

page 6 / 9«123456789»