如何通过ImageReader
?
这是使用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());
答案 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)