うむるむ

うむるむ は主に flash 周りの話と美少女ゲーム系の話の二本立てで構成されています。



[ AS3 ]
crossdomain.xml無しで画像をBitmap化 - 08/07/02 13:11 by umroom

とりあえず外部ドメインのFLVをキャプチャする事は置いておく。まずは画像ファイルあたりからやろう。
Loaderクラスだと画像の他にswfも読めるけど、allowDomainとかやる必要がありそうだから保留。

普通に画像をロードするときは
loader.load( new URLRequest( FILE_URL ) );
となるところを
loader.load( new URLRequest( PHP_URL + FILE_URL ) );
とする。

PHP_URL + FILE_URL の部分は読み込みたい画像のURLをくっ付けてphpに送信。
hogephp.php?file_url=hoge.jpg みたいな感じ。

phpではPOSTされたデータを分解して(さっきの例だとデリミタは"file_url=")読み込みたい画像のURLを取り出す。
続きは下のコピペ。PHPもやらないとなと思った。何やってるかは何となくしかワカラン。
参考:YOPPA BLOGさん

$header[] = "Content-type: text/xml";
$header[] = "Content-length: ".strlen($HTTP_RAW_POST_DATA);
 
$ch = curl_init( "hoge.jpg" ); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
 
if( strlen($post_data)>0 ){ curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); }
 
$response = curl_exec($ch);     
 
if( curl_errno($ch) ){ print curl_error($ch); }
else{
curl_close($ch);
header("Content-type: text/xml; Content-length: ".strlen($response));
print $response;
}

何事もなければ画像がロードされてflash側に返ってくる。
flash側では通常ロードと同じ様に Event.COMPLETE で呼ばれた時に addChild( event.target.loader ) とかできる。

crossdomain.xml無しで通常ロード後に

var bmpDat:BitmapData=new BitmapData( event.target.loader.width, event.target.loader.height, true );
bmpDat.draw( event.target.loader );

のようなことをやるとセキュリティサンドボックスがどうのこうのとダイアログが出るけど、phpを介せばこれも可能になる。

ただ、これだと ProgressEvent.PROGRESS でバーとかパーセンテージを表示したくても bytesTotal の値が0だから計算不可能っぽい。
ロードの進捗を表すにはphpを使うとかして画像の容量を取得しないとダメよね。

« [ AS3 ] クロスドメイン周りでハマってる | ブログトップ | [ AS3 ] 外部ドメイン画像の容量を知る »

トラックバックURL :