如何使用php和addChild将blob图像从mysql获取到as3,方法是获取byteArray并将其转换为图像


How to get blob image from mysql to as3 with php and addChild it in a way of getting byteArray and converting it to image?

如何使用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类加载图像内容,侦听要调度的LoaderEvent.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);
        }
    }