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