如何获取ImageReader的base64编码内容?

时间:2010-06-18 09:33:17

标签: java image htmlunit

如何通过ImageReader

将图像读入base64编码的字符串

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

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

3 个答案:

答案 0 :(得分:4)

HtmlUnit的HtmlImage#getImageReader()返回javax.imageio.ImageReader,它是标准Java 2D API的一部分。您可以使用BufferedImage获取ImageIO#write(),然后您可以使用Apache Commons Codec写入任何风格的OutputStream

Base64OutputStream有一个{{3}},您只需装饰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);

答案 1 :(得分:0)

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

但是如何创建自己的Reader(参见javax.imageio.stream.ImageInputStreamImpl),包含Base64-stuff? 也许这external free 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());

答案 2 :(得分:0)

您可以使用其中一个encodeBase64 methods

来自apache commons codec

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