ActionScript3 BitmapDataをJpegやPNGに変換する
7月 30th, 2013Flash Player 11.3 以降、BitmapDataにencodeメソッドが追加されました。
これを利用したBitmapDataのJpegやPNGへの変換方法をメモ。
var bitmapData:BitmapData = new BitmapData(100, 100, false, 0xED1A3D); var byteArray:ByteArray = new ByteArray(); bitmapData.encode(bitmapData.rect, new flash.display.PNGEncoderOptions(), byteArray);
これで、byteArrayに変換後のデータが入ります。
bitmapData.encode()の第2引数を変えることによって、JPEGやJPEGXRにもできます。
以下の3種類
- PNGEncoderOptions
- JPEGEncoderOptions
- JPEGXREncoderOptions
以下、wonderflにFlash Player 11.3以前のやり方のサンプルがあったので、forkして追加してみました。
BitmapDataのPNG, Jpeg, JpegXRへの変換 – wonderfl build flash online
// forked from kihon's flash on 2010-4-24 package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Sprite; import flash.events.Event; import flash.net.FileReference; import flash.utils.ByteArray; import mx.graphics.codec.PNGEncoder; import mx.graphics.codec.JPEGEncoder; import com.bit101.components.PushButton; public class Main extends Sprite { private var canvas:BitmapData; public function Main() { canvas = new BitmapData(100, 100, false, 0xED1A3D); var bitmap:Bitmap = new Bitmap(canvas); addChild(bitmap); bitmap.x = 182; bitmap.y = 182; new PushButton(this, 182, 282, "旧方式 save(PNG)", onMouseClick); new PushButton(this, 182, 302, "旧方式 save(JPEG)", onMouseClick2); new PushButton(this, 182, 322, "FP11.3以降 save(PNG)", onMouseClick3); new PushButton(this, 182, 342, "FP11.3以降 save(JPEG)", onMouseClick4); new PushButton(this, 182, 362, "FP11.3以降 save(JPEGXR)", onMouseClick5); } private function onMouseClick(event:Event):void { var ba:ByteArray = new PNGEncoder().encode(canvas); new FileReference().save(ba, "t.png"); } private function onMouseClick2(event:Event):void { var ba:ByteArray = new JPEGEncoder().encode(canvas); new FileReference().save(ba, "t.jpeg"); } private function onMouseClick3(event:Event):void { var ba:ByteArray = new ByteArray(); canvas.encode(canvas.rect, new flash.display.PNGEncoderOptions(), ba); new FileReference().save(ba, "t2.png"); } private function onMouseClick4(event:Event):void { var ba:ByteArray = new ByteArray(); canvas.encode(canvas.rect, new flash.display.JPEGEncoderOptions(), ba); new FileReference().save(ba, "t2.jpeg"); } private function onMouseClick5(event:Event):void { var ba:ByteArray = new ByteArray(); canvas.encode(canvas.rect, new flash.display.JPEGXREncoderOptions(), ba); new FileReference().save(ba, "t2.jxr"); } } }