Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Get data URI from object.
- *
- * Encoding to JPG took 2000ms in some cases where PNG took 200ms.
- * I have not extensively tested this but it seems to be 10x faster
- * than JPG.
- * */
- public function getDataURI(target:Object, type:String = "png"):String {
- var output:String;
- if (type.toLowerCase()=="jpg") {
- type = "jpeg";
- }
- output = "data:image/" + type + ";base64," + getBase64ImageData(target, type);
- return output;
- }
- /**
- * Returns base64 image string.
- *
- * Encoding to JPG took 2000ms in some cases where PNG took 200ms.
- * I have not extensively tested this but it seems to be 10x faster
- * than JPG.
- *
- * Performance:
- * get snapshot. time=14
- * encode to png. time=336 // encode to jpg. time=2000
- * encode to base 64. time=35
- * */
- public function getBase64ImageData(target:Object, type:String = "png", checkCache:Boolean = false):String {
- var component:IUIComponent = target as IUIComponent;
- var bitmapData:BitmapData;
- var byteArray:ByteArray;
- var base64:Base64Encoder;
- if (base64BitmapCache[target] && checkCache) {
- return base64BitmapCache[target];
- }
- //var time:int = getTimer();
- if (component) {
- bitmapData = BitmapUtil.getSnapshot(component);
- }
- else if (target is DisplayObject) {
- bitmapData = DisplayObjectUtils.getBitmapDataSnapshot2(target as DisplayObject);
- }
- else if (target is BitmapData) {
- bitmapData = target as BitmapData;
- }
- else {
- return null;
- }
- //trace ("get snapshot. time=" + (getTimer()-time));
- //time = getTimer();
- if (type=="png") {
- if (!pngEncoder) {
- pngEncoder = new PNGEncoder();
- }
- byteArray = pngEncoder.encode(bitmapData);
- }
- else if (type=="jpg" || type=="jpeg") {
- if (!jpegEncoder) {
- jpegEncoder = new JPEGEncoder();
- }
- byteArray = jpegEncoder.encode(bitmapData);
- }
- else {
- // raw bitmap image data
- byteArray = bitmapData.getPixels(new Rectangle(0, 0, bitmapData.width, bitmapData.height));
- }
- //trace ("encode to png. time=" + (getTimer()-time));
- //time = getTimer();
- if (!base64) {
- base64 = new Base64Encoder();
- }
- base64.encodeBytes(byteArray);
- //trace(base64.toString());
- var results:String = base64.toString();
- //trace ("encode to base 64. time=" + (getTimer()-time));
- base64BitmapCache[target] = results;
- return results;
- }
- public var base64BitmapCache:Dictionary = new Dictionary(true)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement