2016-04-29 26 views
1

我正在使用SWT编程桌面应用程序,并且因为灵活性而使用浏览器的部分界面。在SWT浏览器中控制图像的原点

我很容易就可以引入外部图像。在网络上

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

或图像:在文件系统中的图像

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

我可以从一个数据流中的图片?在我的代码的一些地方,我想编程这样的事情:

OutputSteam getExternaResource(String resourcePath) 

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

回答

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); 
    
+0

这似乎是一个好主意,但我必须搞出几个JavaScript库。也许没有那么难,我想了想。 – Troncador

+0

您是否知道'

+0

是的,https://en.wikipedia.org/wiki/Data_URI_scheme。但是在我的程序中,我使用降价库,然后我必须更改库的代码,而不是添加图像添加该代码 – Troncador