Flex/Tips

Ads

手順

大筋の手順は以下の通りです。

  1. Flashの表示内容をBitmapDataオブジェクトとして取得
  2. BitmapDataオブジェクトを画像のバイトストリームに変換
  3. サーバにPOSTして保存

コーディング

DisplayObjectの表示内容をBitmapDataオブジェクトとして取得

手順は以下の通り

  1. 必要なサイズの幅と高さのBitmapDataオブジェクト生成
  2. drawメソッドでDisplayObjectを描き込む

サンプルソース

function createBitmapData(src:DisplayObject):BitmapData {
  var bitmap = new BitmapData(src.width, src.height);
  bitmap.draw(src);
  return bitmap;
}

Bitmapオブジェクトを画像のバイトストリームに変換

Adobeラボに PNGEncoder と JPEGEncoder があるのでコレを使うと良い。

サンプル

//BitmapData→PNG変換
var png:ByteArray = new PNGEncoder().encode(bitmap);
 //BitmapData→JPEG変換
var jpg:ByteArray = new JPGEncoder(75).encode(bitmap);

サーバにPOSTして保存

サーバ側にアップロードの受付CGIを作っておいて適当にアップロードするんだが、Flash では multipart/form-data なPOSTがサポートされていない*1。 なので以下のような手段をとることになる。

  • 生POSTする方法
    • URLRequestのdataプロパティにByteArrayをセットしてPOSTする
    • サーバ側ではリクエストのストリームをそのまま保存すればよい
    • 欠点はパラメータがPOSTでは渡せないこと(クエリ文字列を付けておけばパラメータも渡せる)
  • Base64エンコードして送るなど
    • 適当に文字列エンコードしてしまえば普通にリクエストパラメータに出来るのでそれでPOSTなりする
    • サーバ側ではBase64デコードして保存すればよい
    • 欠点はBase64エンコードする分データ転送量が増えることと、サーバ側でデコードが必要なこと

*1 FireReferenceがマルチパートのファイルアップロードをサポートしているが、これはファイル選択ダイアログを出してのアップロードしかできない

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-09-25 (火) 23:46:51 (4630d)