Loader クラス(livedocs@lab)は、SWF ファイルを読み込んだり、JPEG, PNG, GIF 等のイメージデータを読み込むのに使います。Loader のメソッドは以下のとおりです。
public load(request:URLRequest) : Void // 指定された URL からロード public unload() : Void // 読み込んだオブジェクトの削除 public close() : Void // 実行中のロードをキャンセル public loadBytes(bytes:ByteArray) : Void // 引数からデータをロード
読み込まれたオブジェクトは Loader の子オブジェクトになります。Loader.content プロパティからこれを参照することが出来るようになっています。Loader は DisplayObjectContainer のサブクラスですが、子オブジェクトを一つしか持つことが出来ない特殊なクラスです。このため子オブジェクトを追加/削除する類のメソッドを呼び出すと例外が投げられます。
loadByte メソッドはちょっと面白いメソッドで、メモリ上のバイナリデータから SWF や GIF, JPEG, PNG のオブジェクトを作成することができます。
Loader のイベントとしては、ロードの状況や終了を知らせるイベントがサポートされています。
open : 処理が開始された progress : ロード処理を実行中 complete : ロードが完了した init : ロードした SWF が初期化された
securityError や unload といった新しいイベントも追加されました。
読み込み中のオブジェクトの情報は Loader.loadeeInfo プロパティからも得ることが出来ます。このために LoaderInfo というクラスが専用で提供されています。(livedocs@lab) Loader.loadeeInfo プロパティは読み込まれる側からも共有されていて、読み込まれた SWF からは DisplayObject.root.loaderInfo プロパティ経由でアクセスできます。このとき、読み込まれた SWF は、読み込む際に URL パラーメタが指定されていると loaderInfo.arguments プロパティから取得できるようになっています。
AS1/2 では、MoviClipLoader クラスや MovieClip.loadMovie メソッドが同じ目的に使用されていましたが、AS3 では Loader に置き換えられています。
少し話しは外れますが、AS3 からは LoadVars も Loader のサブクラスの URLLoader (livedocs@lab)で置き換えられました。併せて AS2 の XML は通信機能が省略された上で XMLDocument (livedocs@lab)というクラスに変更されています。(AS3 の XML は新しいクラスです。これについては別途詳しく解説する予定です。)
動的に生成されたGIF, JPEG, PNGなどの画像データをユーザが保存できるようにするにはどのようにしたら良いでしょうか。
FileReference.download()を利用する場合は引数に
URLRequestオブジェクトがあるため、メモリ上にせっかくあるバイナリデータをウェブ上のサーバに送信する必要ということでしょうか…
動的に生成された画像をユーザーが閲覧可能であるだけでなく、ダウンロードできるようにする方法はあるのでしょうか…
バイナリデータをサーバに転送することなく可能な手法はあるのでしょうか。
ご教授いだたければ幸いです。
アドバイスのほど、よろしくお願いいたします。
j さん、こんにちは。
Flash Player には File I/O の API が無いので、ローカルディスクにデータを書き出すことができません。
一般的な Web サイト内での使用だと思いますので、サーバを経由しないのだと、あとは JavaScript と連携するくらいでしょうか。
ackieさん、アドバイスありがとうございます。
了解しました。
一度画像情報をサーバへ送り、そのURLをFileReferenceで
指定してデータをダウンロードすることを考えて見ます。
>サーバを経由しないのだと、あとは JavaScript と連携するくらいでしょうか。
興味深いのですが私には難しいです。
JavaScriptとActionScript間の通信・連携手法はウェブで調べてみましたが・・・