2009-07-01 20 views
2

GWTでデータURIを作成することはできますか?GWTのデータURI

Iは、データURIを使用して実際の画像としてバイト配列画像を注入します。

答えて

2

GWTのトランクでClientBundleをチェックアウトする必要があります。 http://code.google.com/p/google-web-toolkit/wiki/ClientBundle

この機能はGWT 2.0まで出荷されていませんが、現在は多用されています。

+0

+1はclientBundleを推奨します。ただし、データURLは、base64でエンコードされた文字列が同等の画像よりも大きいため、帯域幅の点で効率が悪い可能性があります。私はどのデータのURLがCSSスプライト(ImageBundleはあなたのために自動的に行うのですか)以上のものを持っているか分かりません。 – Chii

+0

実際には、オブジェクトモデルが持つデータの種類によって異なります。職場では、イメージバイナリデータを持つXMLデータ標準と対話します。このデータをクライアント上で利用するのは理にかなっています。さもなければ、私たちはそれを壊してメッセージから取り除き、どこかのサーバにそれを格納し、次に戻って情報を取得するサーブレットコールを持っていなければなりません。言い換えれば、時にはこれが画像サーブレットを持つことになる。 –

+0

ありがとう、これは完璧です! :) –

2

はい。これを行うことは完全に可能です。 IE6がバイナリデータストリームをこのように処理しないことを実現するまでは、アプリケーション用にしました。あなたはいくつかの方法でそれを行うことができます。私の例では、バイト配列をどこかの文字列に変換し、適切にエンコードされ、データURIの型が適切であると仮定しています。私はまた、あなたが選択したデータスキームの基本的なフォーマットを知っている(またはそれを見つけることができる)と仮定しています。

私はこれらの例をfrom the Wikipedia article on data URI scheme撮影しました。

最初はちょうどあなたが通常どおり画像の参照を作るために、生のHTMLを使用して、それをページに挿入することです。

HTML html = new HTML("<img src=\"data:image/png;base64, 
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP 
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA 
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J 
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq 
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0 
vr4MkhoXe0rZigAAAABJRU5ErkJggg==\" alt=\"Red dot\">"); 

画像を使用することもできます。 (どのほぼ同じ出力HTML/JSを生成する必要があります。)

Image image = new Image("data:image/png;base64, 
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGP 
C/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IA 
AAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1J 
REFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jq 
ch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0 
vr4MkhoXe0rZigAAAABJRU5ErkJggg=="); 

これは、あなたのロードされた画像の上に画像抽象化のフルパワーを使用することができます。

私はまだあなたがこのソリューションを拡張し、データURIをサポートしていないブラウザに対処するためにGWTの延期バインディングメカニズムを使用することを考えています。 (IE6、IE7)

関連する問題