首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS3 -压缩ByteArray

AS3 -压缩ByteArray
EN

Stack Overflow用户
提问于 2011-07-03 09:02:39
回答 2查看 5.8K关注 0票数 2

我正在生成一个PNG,并通过PHP将其作为Base64字符串上传到我的服务器。可以在AS3中压缩Base64字符串吗?

这是我的代码:

代码语言:javascript
复制
var png:ByteArray = PNGEncoder.encode(b);
var myimage:String = Base64.encodeByteArray(png);

我希望能把事情搞快一点。感谢您提供的任何信息。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-03 09:17:38

您的PNG数据是already compressed。您可以尝试手动压缩Base64数据,但最终将再次得到二进制数据,并且结果不能比原始图像数据小。如果您的服务器可以接受二进制数据,那么您将通过跳过Base64编码并只传输原始图像数据来节省最多的空间。

或者,您可以尝试将图像编码为JPEG而不是PNG,这将允许您进一步减小数据大小,尽管这是以牺牲图像质量为代价的。

票数 3
EN

Stack Overflow用户

发布于 2011-07-03 12:54:06

我认为这段代码可以帮助你:

代码语言:javascript
复制
import flash.utils.ByteArray;
import flash.display.Loader;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import mx.utils.Base64Decoder; //Transform String in a ByteArray.
import mx.utils.Base64Encoder; //Transform ByteArray in a readable string.
import mx.graphics.codec.PNGEncoder; //Encode a BitmapData in a PNG;

var myBMD:BitmapData=new myBitmapData(0,0); //In this case I had a BitmapData in the library so I took it from there.

var myBMDByteArray:ByteArray=(new PNGEncoder).encode(myBMD); //Create the ByteArray of myBMD usinf the PNGEncoder.

var compStr:String=compress(myBMDByteArray); //Creates String
trace(compStr);

// The loader acts exactly as we were loading an external PNG except the fact that we 
write the ByteArray.

var loader:Loader = new Loader();

loader.loadBytes(uncompress(compStr)); // In the loadBytes we write the Base64 String of the image.

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

function loadComplete(e:Event):void

{

    var bmp:BitmapData=new BitmapData(loader.width,loader.height,true,0x0);

    bmp.draw(loader);

    addChild(new Bitmap(bmp));

}


// Compress a ByteArray into a Base64 String.

function compress(bytes:ByteArray):String 

{

    var enc:Base64Encoder = new Base64Encoder();    
    enc.encodeBytes(bytes);
    return enc.drain().split("\n").join("");
}

// Uncompress a Base64 String into a ByteArray.

function uncompress(str:String):ByteArray 
{

    var dec:Base64Decoder = new Base64Decoder();

    dec.decode(str);

    var newByteArr:ByteArray=dec.toByteArray();        

    return newByteArr;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6560475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档