2010-06-18 18 views
2

如何通過ImageReader將圖像讀入base64編碼的字符串?如何獲取ImageReader的base64編碼內容?

下面是使用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

HtmlUnit的HtmlImage#getImageReader()返回javax.imageio.ImageReader這是標準Java 2D API的一部分。您可以從中獲得BufferedImage,然後您可以使用ImageIO#write()將其寫入任何味道的OutputStream

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

我不太確定你到底想要什麼。

但是如何創建自己的Reader(請參閱javax.imageio.stream.ImageInputStreamImpl),其中包含Base64的東西? 也許這個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());