[AS3] PHPとAS3の連携 ByteArrayでサーバー側から受け取ったJPEG画像を読み込む

2010/09/29

こんにちは。きんくまです。

URLアドレスやファイル名が分かっている場合に、Loaderクラスを使えばJPEGファイルはひっぱってこれます。
でも、サーバーにリクエストして、バイナリが直接返ってくる場合はどうするのか?というと、
Loader.loadBytes()をつかってやればいいみたいです。
って、こんなこと思いつかないよー!!
下記サイトで教えてもらいました。ありがとうございます。
>> FlashからPHPへバイナリーデータを送信する | Mtok-blog

■Main.as

package 
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.errors.IOError;
	import flash.events.Event;
	import flash.events.IOErrorEvent;
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.utils.ByteArray;
	
	/**
	 * ...
	 * @author KinkumaDesign
	 */
	public class Main extends Sprite 
	{
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			var req:URLRequest = new URLRequest();
			req.url = "myjpg.php";
			var urlLoader:URLLoader = new URLLoader();
			urlLoader.dataFormat = URLLoaderDataFormat.BINARY; //返ってくるのはBynary
			urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
			urlLoader.addEventListener(Event.COMPLETE, urlloaderCompleteHandler);
			urlLoader.load(req);
		}
		
		private function urlloaderCompleteHandler(e:Event):void 
		{
			var urlLoader:URLLoader = e.target as URLLoader;
			var barr:ByteArray = urlLoader.data as ByteArray;
			var loader:Loader = new Loader();
			loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderCompleteHD);
			loader.loadBytes(barr); //BynaryをLoaderで読み込む!
		}
		
		private function loaderCompleteHD(e:Event):void 
		{
			var info:LoaderInfo = e.target as LoaderInfo;
			var bm:Bitmap = info.content as Bitmap; 
			var bmd:BitmapData = bm.bitmapData; //BitmapDataを取り出したければ
			
			addChild(bm);
		}
		
		private function ioErrorHandler(e:IOErrorEvent):void 
		{
			throw new Error(e.text);
		}
		
	}
	
}

■myjpg.php

<?php
$file_name = "sample.jpg";
$file = fopen($file_name, "r") or die("error");
$jpg_byte = fread($file, filesize($file_name));
echo $jpg_byte;
?>
LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る