1

我想使用现有的实例WebClient来下载图像。这样做的原因是因为我希望 cookie 随请求一起传递。

如何使用现有实例下载图像WebClient

另外,我如何对图像进行base64编码以便能够使用它来查看它data:image/jpeg;base64,...

当前代码:

WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
UnexpectedPage imagePage = client.getPage("http://...");
String imageString = imagePage.getWebResponse().getContentAsString();
BASE64Encoder encoder = new BASE64Encoder();
String base64data = encoder.encode(imageString.getBytes());

所以现在我有了图片的 base64 数据,但我仍然无法使用data:image/jpeg;base64,....

4

1 回答 1

2

有几点需要考虑:

  • BASE64Encoder()生成一个每 77 个字符有一个换行符的字符串。使用.replaceAll("\r?\n","").
  • 对于该方法,最好检索网页InputStream而不是字符串。此外,为了将其转换为byte数组,我使用了一种实用程序方法(可以在此处找到源代码和其他选项)。

工作源代码:

public static void main (String args[]) throws IOException {
    WebClient client = new WebClient(BrowserVersion.FIREFOX_3_6);
    UnexpectedPage imagePage = client.getPage("http://i.stack.imgur.com/9DdHc.jpg");
    BASE64Encoder encoder = new BASE64Encoder();
    String base64data = encoder.encode(inputStreamToByteArray(imagePage.getWebResponse().getContentAsStream()));
    System.out.println("<img src=\"data:image/png;base64,"+base64data.replaceAll("\r?\n","")+"\" />");
}

private static byte[] inputStreamToByteArray(InputStream is) throws IOException {
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    int nRead;
    byte[] data = new byte[16384];
    while ((nRead = is.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, nRead);
    }
    buffer.flush();
    return buffer.toByteArray();
}

源图像:

瑶脸

在此处输出 base64 图像。

于 2013-08-04T05:13:28.513 回答