画像を単色に平均化

color_sampling.jpg

ちょっと次のネタをやりたいなーと思っててテスト.
1枚の画像を単色の色でそれらしく置き換え.

とりあえずザザッっと書いてみたけど案外それらしく見えるような気がするのでそのままでいいかな.
ここに載せられるように操作できる形にしたけどなんかBitmapData.draw()で外部から読み込んだ画像から取ろうとすると失敗する...
Flashアプリ上では取得可能だけどローカルとかサーバにあげると取れない...
単純に外部画像をdrawするのはできるから外部画像とかいう問題じゃないのかな...


contributor nao : 2006年01月17日 01:50

trackback

trackback for this entry URL:
http://blog.graffiti-web.org/mt/mt-tb.cgi/384

this list is refer to the this entry: 画像を単色に平均化:

» 外部ドメインからロードした画像をBitmapData.drawできない罠 from hidesignlab.™ blog
以前grafitti-webのnaoさんとこでも話題になってた件と同じかな?'ェ... [continue]

trackback date: 2006年02月09日 18:39

comment

ボクも全く同じ現象になりましたよ。
外部サーバーからの画像の場合「getPixel」すると「255」しか返ってこなくて、全部ブルーになっちゃうんですよね。
同じサーバー上の画像なら大丈夫でした。
謎な仕様ですよね。この仕様のお陰で随分可能性が減りますよ・・・

contributor spf : 2006年01月17日 03:30


あらっ!!??
自分のミスかと思ってたらやっぱりダメなんですか...

これ仕様なんですか??
バグではないのかなぁ...

BitmapData.getPixcel()で帰ってくる値はコンストラクタで初期化した色が返ってくるっぽいですね.

contributor nao : 2006年01月17日 08:35


てか、getPixel()どころか、draw()ができないんですね・・・
しょぼーーー。

contributor spf : 2006年01月18日 01:29


外部サーバーからロードした画像を内部に持つMCはなにもキャプチャされないみたいです・・・
ルートをまるごとキャプチャするのはできるんですけどね・・・
なんじゃそりゃ・・・

contributor spf : 2006年01月18日 01:51


>ルートをまるごとキャプチャするのはできるんですけどね・・・

あ、これ嘘でした。すみません・・・

contributor spf : 2006年01月18日 04:40


試してないですけど、こんなのもあるみたいです。
BitmapData関連って情報少ないうえにバグが多くて困りものですね…'';

fladdict.net blog: 外部からロードしたJPEGに、ビットマップスムージングがかからないバグ
http://www.fladdict.net/blog-jp/archives/2005/12/jpeg.php

contributor hi : 2006年01月18日 06:48


> spfさん
別ドメインのものはキャプれないんですね,やっぱり...
でもこの情報どこにも見かけないんですよねー.
サーバサイド噛ますしかないかなぁ.

> hiさん
早めに直して欲しいですねー.
8.5でそれどころじゃないのかな...

contributor nao : 2006年01月18日 08:53


引数で指定した画像を読み込む関数と、その画像をキャプチャする関数を
定義した swf を作り、それを画像と同じドメインに置いてプロキシ的に使えば
外部ドメインの画像もキャプチャできますよー

proxy_mc.loadMovie("****/proxy_capture.swf");
// ---読み込み待ち
proxy_mc.loadImage( image_url );
// ---読み込み待ち
proxy_mc.capture();
display_mc.attachBitmap( proxy_mc.bmp, 1 );

てな感じで。
phpとか使わずに済みますね。

contributor mune : 2006年01月18日 17:02


↑補足
プロキシファイル側に System.security.allowDomain 必須です。

contributor mune : 2006年01月18日 17:05


> muneさん
今回やろうと思ってたのはflickrからとろうと思ってたんでswf自体がおけないんですよー。
でも、proxy swf挟むと取れるってことはやっぱりわざと規制してるのかなぁ。。。

contributor nao : 2006年01月18日 17:15


>muneさん
神がいた!
あ、はじめまして。
試したら正常に動作しました!
今コレ系の案件2つしてて、1つはYahooの画像検索API使ったものなので、サーバーサイドでごにょごにょしなきゃいけないんですが、もう1つの方では完璧に解決できそうです。
ありがとうございます!

contributor spf : 2006年01月19日 04:21


>naoさん
お役に立てなくてすみません。
といいつつ、自分もいい勉強になりました(試行錯誤したので

>spfさん
お役に立てて何よりです。
あ、はじめましてじゃないですよ。
以前にフォントシンボル共有なエントリにコメント打ったことが・・・打ちっぱなしだったけど。
微妙にハンドル変わってるし(^^;

contributor mune : 2006年01月19日 18:43


>muneさん
いや,きっといつか使うと思いますよ!

contributor nao : 2006年01月19日 18:55


> muneさん
あー!2匹狼の遠吠えの!
ブログが閉鎖されたので残念だなぁっておもってたんですよ!

contributor spf : 2006年01月20日 12:08


naoさん、僕も同じ現象にはまってます。。
http://blog.hidesignlab.com/archives/2006/02/bitmapdatadraw.html

どうやって脱出できましたか...?'ェ';
とりあえず、あとでswfをプロキシにするのを試してみることにします。

contributor hi : 2006年02月09日 19:57


> hiさん
既に見ましたよー.
ボクは解決してないです.
お仕事じゃないのでローカル画像にしようかなーと...

contributor nao : 2006年02月09日 20:57


今さら同じ問題にぶちあたりまして
おかげさまで解決できました。
いちおうソースを書いておきます。

外部サーバー側、proxy_capture.swf
System.security.allowDomain("*");
function capture(filePath,w,h,tr){
bmp = new flash.display.BitmapData(w,h,tr);
bmp.draw(eval(filePath));
}

読みこみ元test.swf
//事前に読み込み
proxyCapture。loadMovie("/anydomain/proxy_capture.swf")
//実際に使うとき
proxyCapture.capture("_root.target_mc",500,500,false);
empty_mc.attachBitmap(proxyCapture.bmp, 0);
//使い終わったら
proxyCapture.bmp.dispose();

contributor nakamura : 2006年08月13日 03:36


> nakamuraさん
お役に立てて(ボクじゃないけど)よかったです.
ソース付でありがとうございます!

contributor nao : 2006年08月13日 15:43


いまさらですが、外部jpegのスムージングと、
BitmapData.drawの問題にもだえてたらこのページにたどり着きました。
FlashPlayer9だと、
System.security.loadPolicyFile( '外部jpegのドメイン/crossdomain.xml' );
を使って、drawできるようになったのですが、
FlashPlayer8では解決しませんでした。
あまり有用ではないですがご参考まで。

contributor tatset : 2006年10月17日 15:49


> tatset さん
Player9の情報までありがとうございます!

contributor nao : 2006年10月17日 16:04