// 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; } } } ByteArray.compress()とByteArray.deflate()のサイズ差を検証