In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

ByteArray.compress()とByteArray.deflate()のサイズ差を検証

// forked from nemu90kWw's 選んだファイルを圧縮してから Base64 エンコードする
// forked from hikipuro's 2009-3-14 選んだファイルを Base64 エンコードする
package 
{
    import flash.display.Loader;
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.FileFilter;
    import flash.net.FileReference;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.utils.ByteArray;
    import mx.utils.Base64Encoder;
    import flash.system.System;
    
    public class Main extends Sprite 
    {
        private var fileReference:FileReference;
        private var textField:TextField;
        private var button1:SimpleButton;
        private var loader:Loader;
        private var bytes_source:ByteArray;
        private var bytes_zlib:ByteArray;
        private var bytes_deflate:ByteArray;
        
        /**
         * コンストラクタ
         */
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        /**
         * 初期化メソッド
         * @param    e
         */
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
            
            // ファイルの選択ボタンの作成
            button1 = new SimpleButton();
            button1.upState = makeButton(0xDDDDDD, 100, 20, 10, "ファイルの選択");
            button1.overState = makeButton(0xEEEEEE, 100, 20, 10, "ファイルの選択");
            button1.downState = makeButton(0xCCCCCC, 100, 20, 10, "ファイルの選択");
            button1.hitTestState = button1.upState;
            button1.addEventListener(MouseEvent.MOUSE_DOWN, onSelectButtonDown);
            button1.x = 5;
            button1.y = 5;
            addChild(button1);
            
            // テキストフィールドの準備
            textField = new TextField();
            textField.selectable = false;
            textField.autoSize = TextFieldAutoSize.LEFT;
            textField.x = 0;
            textField.y = 30;
            textField.text = "";
            addChild(textField);
            
            // イベントの登録
            fileReference = new FileReference();
            fileReference.addEventListener(Event.SELECT, onSelect);
            fileReference.addEventListener(Event.COMPLETE, onComplete);
            
            // ローダーの準備
            loader = new Loader();
            loader.y = 80;
            addChild(loader);
        }
        
        /**
         * ファイルの選択ボタンが押された時
         * @param    event
         */
        private function onSelectButtonDown(event:MouseEvent):void 
        {
            // ファイル選択ダイアログを表示する
            fileReference.browse();
        }
        
        /**
         * ファイル選択イベント
         * @param    event
         */
        private function onSelect(event:Event):void
        {
            fileReference.load();
        }
        
        /**
         * 読み込み完了イベント
         * @param    event
         */
        private function onComplete(event:Event):void
        {
            bytes_source = fileReference.data;
            
            loader.loadBytes(fileReference.data);
            loader.scaleX = 0.5;
            loader.scaleY = 0.5;
            
            bytes_source.position = 0;
            bytes_zlib = new ByteArray();
            bytes_source.readBytes(bytes_zlib);
            bytes_zlib.compress();
            bytes_source.position = 0;
            bytes_deflate = new ByteArray();
            bytes_source.readBytes(bytes_deflate);
            bytes_deflate.deflate();
            
            textField.text = "source : "+bytes_source.length+"\ncompress : "+bytes_zlib.length+"\ndeflate : "+bytes_deflate.length;
        }
        
        /**
         * ボタンを作って返す
         * @param    color    色
         * @param    width    幅
         * @param    height    高さ
         * @param    round    角丸の大きさ
         * @param    text    ボタンのテキスト
         * @return    ボタン
         */
        private function makeButton(color:uint, width:int, height:int, round:int, text:String):Sprite
        {
            var t:TextField = new TextField();
            var s:Sprite = new Sprite();
            s.graphics.lineStyle(2);
            s.graphics.beginFill(color);
            s.graphics.drawRoundRect(0, 0, width, height, round);
            s.graphics.endFill();
            
            t.text = text;
            t.selectable = false;
            t.width = width;
            t.autoSize = TextFieldAutoSize.CENTER;
            s.addChild(t);
            
            return s;
        }
    }
}