在SWT浏览器中控制图像的原点

时间:2016-04-29 12:37:35

标签: java browser swt

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

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

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

或网络上的图片:

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

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

OutputSteam getExternaResource(String resourcePath)

我想随意控制请求的来源。

2 个答案:

答案 0 :(得分:3)

我不知道直接这样做的方法,我能想到的是使用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);
    

答案 1 :(得分:0)

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

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