從繪圖中我生成一個PNG並將其作爲Base64字符串通過PHP上傳到我的服務器。 是否可以壓縮AS3中的Base64字符串?AS3 - 壓縮ByteArray
這是我的代碼:
var png:ByteArray = PNGEncoder.encode(b);
var myimage:String = Base64.encodeByteArray(png);
我希望能加快速度一點。 感謝您的任何信息。
從繪圖中我生成一個PNG並將其作爲Base64字符串通過PHP上傳到我的服務器。 是否可以壓縮AS3中的Base64字符串?AS3 - 壓縮ByteArray
這是我的代碼:
var png:ByteArray = PNGEncoder.encode(b);
var myimage:String = Base64.encodeByteArray(png);
我希望能加快速度一點。 感謝您的任何信息。
您的PNG數據是already compressed。您可以嘗試手動壓縮Base64數據,但最終會再次輸入二進制數據,並且結果不能比原始圖像數據小。如果您的服務器可以接受二進制數據,那麼您將通過跳過Base64編碼並僅傳送原始圖像數據來節省大部分空間。
或者,您可以嘗試將圖像編碼爲JPEG而不是PNG,這可以讓您進一步減小數據的大小,儘管會犧牲圖像質量。
我覺得這個代碼可以幫助你:
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;
}