2011-04-19 69 views

回答

7

看到这个例子中取一部分,其将字节的图像,我已经给整个供您参考

package { 
    import encoding.JPGEncoder; 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.Loader; 
    import flash.display.Sprite; 
    import flash.utils.ByteArray; 
    import flash.events.Event 

    public class Converter extends Sprite { 

     [Embed(source = "image.jpg")] 
     private var image:Class 

     private const QUALITY:uint = 80; 

     public function Converter():void { 

      var bitmap:Bitmap = new image(); 
      var bitmapData:BitmapData = bitmap.bitmapData; 

      //encode BitmapData to JPG 
      var encoder:JPGEncoder = new JPGEncoder(QUALITY); 
      var rawBytes:ByteArray = encoder.encode(bitmap.bitmapData); 

      //decode JPG ByteArray back to BitmapData 
      var loader:Loader = new Loader(); 
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE, getBitmapData) 
      loader.loadBytes(rawBytes); 
     } 

     private function getBitmapData(e:Event):void { 
      var decodedBitmapData:BitmapData = Bitmap(e.target.content).bitmapData 
      trace(decodedBitmapData); 
     } 
    } 
} 
+0

这就是我需要的 – Eugeny89 2011-04-19 12:13:12

1

这不是最简单的方法,但根据您的图像的尺寸,可能是值得一看。延斯·克劳斯编制jpeglib与炼金术,它编码速度远远超过的as3corelib的版本,甚至蒂博因贝特的改进AS3版本:

http://www.websector.de/blog/2009/06/21/speed-up-jpeg-encoding-using-alchemy/

+0

hm,这非常有趣。我曾经想过,通过炼金术可以提高生产力! – Eugeny89 2011-04-19 14:41:49

+0

在我们的应用程序中,它几乎是一个10倍的加速。 – 2011-04-19 20:55:04

6

现在,您可以使用内置到Flash Player 11.3和AIR 3.3的原生JPEG编码。

var quality:int = 50; 
var bounds:Rectangle = bitmapData.rect; 
var result:ByteArray = bitmapData.encode(bounds, new JPEGEncoderOptions(50)); 

这需要-swf-version=16被传递到编译器。

+0

对于-swf-version参数为+1(无法让编码自己工作,但是做到了) – frankhermes 2012-06-21 13:11:56

相关问题