ActionScript3 BitmapDataをJpegやPNGに変換する

7月 30th, 2013

Flash 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");
        }
    }
}

Leave a Reply