2

如何通过其将图像读入 base64 编码的字符串ImageReader

这是使用 HtmlUnit 的示例源代码。我想得到base64字符串img

  WebClient wc = new WebClient();
  wc.setThrowExceptionOnFailingStatusCode(false);
  wc.setThrowExceptionOnScriptError(false);
  HtmlPage p = wc.getPage("http://flickr.com");
  HtmlImage img = (HtmlImage) p.getByXPath("//img").get(3);
  System.out.println(img.getImageReader().getFormatName());
4

3 回答 3

4

HtmlUnit 的HtmlImage#getImageReader()返回javax.imageio.ImageReader是标准Java 2D API的一部分。你可以从中得到一个BufferedImage,然后你可以OutputStream使用ImageIO#write().

Apache Commons Codec有一个Base64OutputStream你可以用它来装饰你的OutputStream

HtmlImage img = (HtmlImage) p.getByXPath("//img").get(3);
ImageReader imageReader = img.getImageReader();
BufferedImage bufferedImage = imageReader.read(0);
String formatName = imageReader.getFormatName();
ByteArrayOutputStream byteaOutput = new ByteArrayOutputStream();
Base64OutputStream base64Output = new base64OutputStream(byteaOutput);
ImageIO.write(bufferedImage, formatName, base64output);
String base64 = new String(byteaOutput.toByteArray());

或者,如果您想直接将其写入文件:

// ...
FileOutputStream fileOutput = new FileOutputStream("/base64.txt");
Base64OutputStream base64Output = new base64OutputStream(fileOutput);
ImageIO.write(bufferedImage, formatName, base64output);
于 2010-06-18T11:46:16.973 回答
0

我不太确定你到底想要什么。

但是如何创建您自己的包含 Base64 内容的阅读器(参见 javax.imageio.stream.ImageInputStreamImpl)?也许这个外部免费的 Base64Encoder可以帮助你。

最终可以像这样使用的东西?

WebClient wc = new WebClient(); 
wc.setThrowExceptionOnFailingStatusCode(false); 
wc.setThrowExceptionOnScriptError(false); 

HtmlPage p = wc.getPage("http://flickr.com"); 
HtmlImage img = (HtmlImage) p.getByXPath("//img").get(3); 

MyBase64EncodingReader reader = new MyBase64EncodingReader(img);
System.out.println(reader.toString());
于 2010-06-18T11:22:02.193 回答
0

您可以使用其中一种encodeBase64 方法

来自apache commons 编解码器

并使用 String(bytes[]) 构造函数从结果字节数组中创建一个字符串。

于 2010-06-18T11:22:20.123 回答