URL で指定した場所から画像をロードする

(サンプル一覧を表示する)

URL で指定した場所から画像をロードするテストをしてみました。
透過 PNG の画像をロードしています。

ネット上の画像をロードする時は、Loader クラスを使います。
JPG、PNG、GIF、SWF を読み込むことができるそうです。
Loader クラスは、表示可能なクラスを継承して作られているので、
そのまま addChild() 等で画面表示要素として扱うことができます。

Loader オブジェクト 1 つに対して 1 つだけ画像を読み込むことができます。
2 つの画像をロードする時には、2 つの Loader オブジェクトが必要になります。
Flash の実行画面
URL で指定した場所から画像をロードする

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

URL で指定した場所から画像をロードする

ソースコード

package 
{
	import flash.display.Loader;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	
	/**
	 * URL で指定した場所から画像をロードするサンプル
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * 画像の URL
		 */
		private const url:String = "http://hikipuro.is-a-geek.org/flash/game/image/sample01.png";
		
		/**
		 * 画像ロード用 Loader オブジェクト
		 */
		private var loader:Loader;
		
		/**
		 * テキストフィールド
		 */
		private var textField:TextField;
		
		/**
		 * コンストラクタ
		 */
		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
			
			// 背景に格子模様を描く
			for (var y:int = 0; y < stage.stageHeight; y += 20)
			{
				for (var x:int = 0; x < stage.stageWidth; x += 20)
				{
					graphics.beginFill(0xDDDDDD);
					graphics.drawRect(x, y, 10, 10);
					graphics.drawRect(x + 10, y + 10, 10, 10);
					graphics.endFill();
				}
			}
			
			// テキストフィールドの準備
			textField = new TextField();
			textField.autoSize = TextFieldAutoSize.LEFT;
			addChild(textField);
			
			// URL リクエストオブジェクトの準備
			var urlRequest:URLRequest;
			urlRequest = new URLRequest(url);
			
			// ローダーの準備
			loader = new Loader();
			loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
			loader.contentLoaderInfo.addEventListener(Event.OPEN, onOpen);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			loader.x = 120;
			loader.y = 50;
			addChild(loader);
			
			// URL で指定された場所から画像を読み込む
			loader.load(urlRequest);
		}
		
		/**
		 * ロード処理進捗イベント
		 * @param	e
		 */
		private function onProgress(e:ProgressEvent):void 
		{
			textField.appendText("onProgress : ");
			textField.appendText(e.bytesTotal + " バイト中 ");
			textField.appendText(e.bytesLoaded + " バイト読み込み完了\n");
		}
		
		/**
		 * ロード処理開始イベント
		 * @param	e
		 */
		private function onOpen(e:Event):void 
		{
			textField.appendText("onOpen : ロード開始\n");
		}
		
		/**
		 * ロード処理完了イベント
		 * @param	e
		 */
		private function onComplete(e:Event):void 
		{
			textField.appendText("onComplete : ロード完了\n");
		}
		
	}
	
}		

SWF が置かれているドメインとは違うドメインの画像をロードする時は、
画像ファイルが置かれているサーバのルートに、 crossdomain.xml という
名前のファイルを設置し、その中に Flash Player からのアクセスを許可する
サーバの名前を規則通りに書いておく必要があります。

例えば、sample.com というドメインに画像が置かれているとすると、

http://sample.com/crossdomain.xml

という URL でアクセス可能な場所に、crossdomain.xml を設置します。

crossdomain.xml の中身は、

<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="www.friendOfFoo.com"/>
<allow-access-from domain="*.foo.com"/>
<allow-access-from domain="105.216.0.40"/>
</cross-domain-policy>

のように書きます。
allow-access-from タグの domain 属性に、許可するサーバの名前を書きます。
* のようなワイルドカードも使用できるそうですが、
* のみの指定はやめた方が良いと思います。

参照

外部リンク