Amazonから画像を取得したい! 2

2008/10/14

こんにちは。きんくまです。

前回Amazonから画像を取得しようと試行錯誤したんですが、すごく簡単に解決しました。

クロスドメインポリシーについてよくわかっていなかったのが、原因です。
クロスドメインポリシーは、データの内部にアクセスするときにだけひっかかるようです。知らんかった、、。どういうことかというと、別ドメインから画像をひっぱってきたとき、以下のようになります。
●LoaderをそのままaddChildするだけ→おとがめなし
●Loader.contentにアクセスしようとしたとする→怒られる

だからひっぱってきたBitmapをdrawしたり、Bitmapの中のBitmapDataにアクセスしようとしてもだめです。
他のみなさん、どうやってひっぱってきていたのか不思議でしょうがなくて、こんな感じのことを考えてやろうとしていました。

サーバ側で、img画像を拾ってくる(バイナリ)→ASに渡す→ASで画像データをデコード→ASでaddChild。

そしたら、サーバーからASに渡すところまではたぶんできたようなんですが、AS側のデコードができんかったです。ASで、BitmapDataをpngやjpegにエンコードすることは、as3corelib でできますが、サーバーからバイトコードをASにいれてそれをgifやjpeg、png形式をよみわけてBitmap形式に手動でエンコードすることは、調べたかぎり難しそうです。
で、それを内部で自動化しているのがLoaderクラスということですね。うーん、すごい。

今回のASです。

package
{
  import fl.controls.Button;
  import flash.display.Loader;
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.MouseEvent;
  import flash.net.URLRequest;

  public class CrossDomainImage extends Sprite
  {
    private var _url:String = "http://g-ec2.images-amazon.com/images/G/09/gno/images/orangeBlue/navAmazonLogoPrime._V11252456_.gif";
    private var _loader:Loader;
    private var _button:Button;

    public function CrossDomainImage()
    {
      init();
    }

    private function init():void
    {
      _button = new Button();
      this.addChild(_button);
      _button.move(10, 10);
      _button.addEventListener(MouseEvent.CLICK, loadImage);
      _button.label = "ロード";
    }

    private function loadImage(e:MouseEvent):void
    {
      if (_loader != null)
      {
        removeChild(_loader);
      }
      _loader = new Loader();
      _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComp);
      _loader.load(new URLRequest(_url));
      addChild(_loader);
      _loader.x = 10;
      _loader.y = 40;
    }

    private function loadComp(e:Event):void
    {
      _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComp);
      trace("load complete");
    }

  }

}
LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る