在SVG中创建图像并使用Base64编码URI和JAVA在HTML中呈现

在SVG中创建图像并使用Base64编码URI和JAVA在HTML中呈现,java,html,svg,base64,uri,Java,Html,Svg,Base64,Uri,我正在尝试创建一个返回SVG的服务。要求是SVG必须在img标记中工作(脚本标记将是一个额外的功能),并且还要避免使用JavaScript 我认为在Base64中编码img并将其用作URI是我的最佳选择 Javaservlet String imageString = g2.getSVGElement(); // creates svg html string e.g <svg> blah blah</svg> byte[] imageD

我正在尝试创建一个返回SVG的服务。要求是SVG必须在img标记中工作(脚本标记将是一个额外的功能),并且还要避免使用JavaScript

我认为在Base64中编码img并将其用作URI是我的最佳选择

Javaservlet

        String imageString = g2.getSVGElement();  // creates svg html string e.g <svg> blah blah</svg>
        byte[] imageData = Base64.encodeBase64(imageString.getBytes());

        OutputStream out = response.getOutputStream();
        out.write(imageData);
        out.flush();
        out.close();
HTML


但当我加载页面时,我会看到一个空白的img框。我知道base64 img是正确的,因为当我这样做的时候

<img src="data:image/svg+xml;base64,PHN22...">


它很好用。如何使用上面的HTML标记实现这一点?

为什么要从服务器返回数据URL?只需返回SVG本身。不需要
数据:image/svg+xml;base64,

out.write(imageString.getBytes());
您还应该确保返回的MIME类型正确。即:

response.addHeader("Content-Type", "image/svg+xml");

这让浏览器知道响应是一个SVG文件。

为什么要将图像编码到base64中?为什么不直接使用二进制数据呢?因为我没有看到这个网站:--现在我有了它返回的数据:image/svg+xml;utf8,%3Csvg+xmln-其中utf8之后的所有内容都是URL/HTML编码的-aa并且它仍然不工作。我返回Base64,因为它是我用来使图形工作的。如果我用…创建一个静态HTML页面。“>或…”或-它们都不起作用。但是当我使用base64时,它工作得很好。对于嵌入在静态页面中的URL,base64数据URL是一个合适的选择。这不是从web服务返回生成的SVG时应该做的事情。无论我以Base64还是二进制格式发送它,我都会得到相同的结果:img标记(带src='urlA')显示断开的链接,但当我得到urlA并得到响应时,将其放入img标记的src属性中,图像就会显示出来。不知什么原因,当我检查它时,它说不能加载图像。我不明白你刚才说的。什么是“urlA”?无论我使用二进制还是Base64,我都会遇到同样的问题;URL在img标记内不起作用。如果我直接转到URL(GET或PSOT),它会以“data:image/svg+xml;charset=utf-8,%3Csvg%20xml…”响应,如果我将提供的数据放入img标记中,图像就会工作!URL/urlA的一个例子是我的原始文章中HTML的img标记中的src属性
out.write(imageString.getBytes());
response.addHeader("Content-Type", "image/svg+xml");