如何使用php将blob图像从mysql获取到as3,并以获取byteArray并将其转换为图像的方式对其进行addChild?
这是php:
if($RequestType == 'Select'){ while($row=mysql_fetch_assoc($results)){ $arrdata[]=$row; } foreach($arrdata as $key=>$value){ $output[$key] = $arrdata[$key]; $output[$key]['png'] = base64_encode($arrdata[$key]['png']); } header('Content-type: application/json'); print(json_encode($output));
我已经有了这样的东西,但更长:
VBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAC4jAAAuIwF4pT92AAAYxUlEQVR42u1bB3Sc1ZWe8k/vfem6aPpGk2RjQzGrVRl6xyZZkWS4gFxyDGyEsxjE1gVBTSGAdQg4keyCxF4NsY1pCDARsWiE4pBsiJnN7nKWgM3eJ7/hTDhUIyJyNj7nHh3P/DP/f79373e/e98b0oUXXk6/2ykfwLwTwAW58br1q0j9fX1UQcGBpgjw0cy
(在本文中,我假设您已经处理了HTTP请求结果)
要将base64编码的图像转换为DisplayObject
,首先需要将base64解码为ByteArray
,然后使用Loader
类加载图像内容,侦听要调度的Loader
的Event.COMPLETE
事件。一旦您获得该事件,Loader.content
将包含一个DisplayObject
,您可以使用addChild()
将其添加到屏幕中。
示例:(EDIT:添加了一个Array
来跟踪加载的对象,按请求的顺序排列,并将函数更改为调用以应对)
private var countLoadedImages:int = 0;//track how many images have loaded
private var arrImageLoaders:Array = new Array();//store loaders for call back
public function loadImageFromBase64(yourBase64:String):void
{
var base64:Base64Decoder = new Base64Decoder();
base64.decode(yourBase64);//decode your image
var data:ByteArray = base64.toByteArray();//convert to byte array
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoadComplete);
arrImageLoaders.push(loader.contentLoaderInfo);//add to array in order func was called
loader.loadBytes(data);//hand over to Loader
}
protected function onLoadComplete(event:Event):void
{
countLoadedImages++;
event.target.removeEventListener(Event.COMPLETE,onLoadComplete);
if (countLoadedImages == arrImageLoaders.length)
{
allImagesLoaded();
}
}
protected function allImagesLoaded():void
{
var contentLoaderInfo:LoaderInfo
for (var x:int = 0; x<arrImageLoaders.length; x++)
{
contentLoaderInfo = arrImageLoaders[x] as LoaderInfo;
addChild(contentLoaderInfo.content);
}
}