在 SWT 浏览器中控制图像的来源

Control the origin of images in an SWT browser

我正在使用 SWT 编写桌面应用程序,并且由于灵活性,我在部分界面中使用了浏览器。

我可以很容易地引入外部图像。文件系统中的图像:

<img src="/home/user/image.jpg" />

或网络上的图片:

<img src="http://some.cl/image.jpg" />

我可以从流中获取图像吗?在我的代码的某些地方,我想编写这样的程序:

OutputSteam getExternaResource(String resourcePath)

我想任意控制请求的来源

我不知道有什么直接的方法可以做到这一点,我能想到的就是使用 javascript 将图像数据设置为 base64 字符串到图像的 src 中。 使用 org.eclipse.swt.browser.Browser.execute(String) 或者可能使用 org.eclipse.swt.browser.BrowserFunction

图片应该有一个可以在 javascript:

中使用的 id
<img id="image1" />

编辑:另一方面,也许更容易解析之前的 HTML 并在那里设置图像 base64 字符串。

根据您获得 HTML 的方式,您可以:

  1. 如果您自己创建HTML,只需使用<img src="data:image/png;base64....将图像转换为base64并将其放入src属性
  2. 如果您从外部来源读取 HTML,您可以使用 JSoup 解析 HTML 并替换图像 src 属性使用 base64 字符串。之后使用 Browser.setText(String) 设置浏览器的 HTML,请注意,在这种情况下,相对路径(在链接或图像中)不起作用。

    String html = "html";
    Document doc = Jsoup.parse(html);
    Elements img = doc.getElementsByTag("img");
    for (Element element : img) {
        String src = element.attr("src");
        // READ image using the existing src, convert to base64 (using java.util.Base64) 
        String base64 = ""; 
        element.attr("src", "data:image/png;base64,"+);
    }
    String newHtml = doc.html();
    browser.setText(newHtml);
    

如果您可以控制 HTML 页面,即它是由您的代码生成的,可能来自模板,那么您可以嵌入图像。

图像的字节需要进行 base64 编码并附加到 image 标签的 src 属性,如下所述:http://www.techerator.com/2011/12/how-to-embed-images-directly-into-your-html/