gpt4 book ai didi

java - HtmlUnit 使用 WebClient 将图像下载为 base64 编码的 DATA Uri

转载 作者:行者123 更新时间:2023-11-30 04:17:21 25 4
gpt4 key购买 nike

我想使用 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,... 查看图像。

最佳答案

需要考虑的一些事情:

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

工作源代码:

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();
}

源图片:

yao face

输出base64图像 here

关于java - HtmlUnit 使用 WebClient 将图像下载为 base64 编码的 DATA Uri,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com