是否可以在GWT中创建数据URI?
我想使用数据URI将字节数组图像作为实际图像注入。
答案 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==");
这使您可以在加载的图像上使用图像抽象的全部功能。
我仍然认为您可能希望扩展此解决方案并使用GWT的延迟绑定机制来处理不支持数据URI的浏览器。 (IE6,IE7)
答案 1 :(得分:2)
您应该在GWT的主干中签出ClientBundle。它将自动为支持它们的浏览器创建数据网址,并为其他浏览器提供后备:http://code.google.com/p/google-web-toolkit/wiki/ClientBundle
该功能在GWT 2.0之前不会发布,但现在它正在大量使用。