·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]as3压缩位图BitmapData.encode用法源代码示例

时间:2013-11-04 09:02cnblogs.com
BitmapData.encode 压缩位图数据,JPEGEncoderOptions

  3]as3压缩位图BitmapData.encode用法源代码示例:处理位图数据,一直是flash很重要的一块。在我们的应用中,处理保存图片到本地或上传多服务器上会经常遇到。比如用摄像头拍照上传或保存到本地。或AIR导入图片,处理后保存到磁盘。

在flash player 11.3和air3.3之前,我们可以借助第三方类(JPEGEncoder)这些,很容易处理。现在,有了encode和JPEGEncoderOptions这些,处理位图数据就更简单快捷了。

网上很多人测试过各个方法处理的性能以及占用文件大小情况,encode 都是不错的。

  官方给的解释:

       flash.display.BitmapData.encode() 方法允许您将位图数据本机压缩为以下图像压缩格式之一:

  • PNG - 使用 PNG 压缩,可以选择使用快速压缩,它强调的是压缩速度而不是文件大小。若要使用 PNG 压缩,请将新的 flash.display.PNGEncoderOptions 对象作为 BitmapData.encode() 方法的第二个参数传递。

  • JPEG - 使用 JPEG 压缩,可以选择指定图像品质。若要使用 JPEG 压缩,请将新的 flash.display.JPEGEncoderOptions 对象作为 BitmapData.encode() 方法的第二个参数传递。

  • JPEGXR - 使用 JPEG 扩展范围 (XR) 压缩,可以选择指定颜色通道、损耗和熵 (entropy) 编码设置。若要使用 JPEGXR 压缩,请将新的 flash.display.JPEGXREncoderOptions 对象作为BitmapData.encode() 方法的第二个参数传递。

您可以将图像处理的此功能用作服务器上传或下载工作流程的一部分。

下面的示例代码片段使用 JPEGEncoderOptions 压缩 BitmapData 对象:

  1. var bitmapData:BitmapData = new BitmapData(640,480,false,0x00FF00);  
  2. var byteArray:ByteArray = new ByteArray();  
  3. bitmapData.encode(new Rectangle(0,0,640,480), new flash.display.JPEGEncoderOptions(), byteArray); 

对于JPEGEncoderOptions的参数,其值介于1和100之间。值为1的时候,品质最低,100品质最高。默认值是80,这个时候,处理出来的位图质量已经很好了。

  今天周末,无聊。在家做一个AIR本地处理保存处理图片,才找到了这个。久违期待已久的好东西。无论是用air还是flash player。处理的方式都一样。这里贴出完整的代码以方便以后使用查阅。

面对web,IE:

  1. package 
  2.     import flash.display.Bitmap; 
  3.     import flash.display.BitmapData; 
  4.     import flash.display.JPEGEncoderOptions; 
  5.     import flash.display.Loader; 
  6.     import flash.display.LoaderInfo; 
  7.     import flash.display.Sprite; 
  8.     import flash.events.Event; 
  9.     import flash.net.FileReference; 
  10.     import flash.net.URLRequest; 
  11.     import flash.utils.ByteArray; 
  12.      
  13.      
  14.     public class IeJpegEncoderDemo extends Sprite 
  15.     { 
  16.         public function IeJpegEncoderDemo() 
  17.         { 
  18.             load(); 
  19.         } 
  20.          
  21.         private function load():void 
  22.         { 
  23.             var loader:Loader = new Loader(); 
  24.             var request:URLRequest = new URLRequest(); 
  25.             request.url = "../cuplayer_com/01.jpg"
  26.             loader.load(request); 
  27.             loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler); 
  28.         } 
  29.          
  30.         private function completeHandler(e:Event):void 
  31.         { 
  32.             var bitmap:Bitmap = e.target.content as Bitmap; 
  33.             var bitmapData:BitmapData = new BitmapData(bitmap.width,bitmap.height,true,0); 
  34.             bitmapData.draw(bitmap); 
  35.             (e.target as LoaderInfo).loader.unloadAndStop(); 
  36.              
  37.             var ba:ByteArray = new ByteArray(); 
  38.             var jpegEncoder:JPEGEncoderOptions = new JPEGEncoderOptions(80); 
  39.             bitmapData.encode(bitmapData.rect,jpegEncoder,ba); 
  40.              
  41.             var file:FileReference = new FileReference(); 
  42.             file.save(ba,"cuplayer.jpg"); 
  43.         } 
  44.     } 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器