You can get RenderedImagedirectly, without saving to a file:
private RenderedImage getImage(HtmlImage image) throws IOException {
ImageReader reader = image.getImageReader();
int minIndex = reader.getMinIndex();
return reader.read(minIndex);
}
Here is a working example:
package org.human.joecoder.htmlunit;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlImage;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class HtmlUnitImageScraper {
public static void main(String[] args) throws Exception {
WebClient webClient = new WebClient();
HtmlPage currentPage = (HtmlPage) webClient.getPage(new URL(
"http://www.google.com"));
final List<?> images = currentPage.getByXPath("//img");
for (int i = 0; i < images.size(); i++) {
Object imageObject = images.get(i);
HtmlImage image = (HtmlImage) imageObject;
RenderedImage buf = getImage(image);
ImageIO.write(buf, "png", new File("image_"+i+".png"));
}
webClient.closeAllWindows();
}
private static RenderedImage getImage(HtmlImage image) throws IOException {
ImageReader reader = image.getImageReader();
int minIndex = reader.getMinIndex();
return reader.read(minIndex);
}
}
source
share