package com.patch.html_to_png_server.renderers; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.FileChannel; import java.nio.channels.ReadableByteChannel; import javax.imageio.ImageIO; import com.patch.html_to_png_server.renderers.helpers.ImageProcessor; /* * Renders by proxying to an existing Firefox instance running MozRepl * with its "screenshot" interactor. * * For MozRepl installation instructions, see * http://hyperstruct.net/2009/2/5/turning-firefox-into-a-screenshot-server-with-mozrepl * Use the JavaScript file supplied in "contrib/moz-repl-screenshot-server.js". * * MozRepl must be running on localhost, port 4242. * * The final image will be autocropped. */ public class MozReplRenderer extends AbstractRenderer { public MozReplRenderer() throws IOException { super(); } @Override public void generatePngFile() throws IOException { File midPngFile = File.createTempFile("html_to_png_ff3_mid", ".png"); midPngFile.deleteOnExit(); URL htmlUrl = htmlFile.toURI().toURL(); URL screenshotUrl = new URL("http://localhost:4242/screenshot/" + htmlUrl); InputStream is = screenshotUrl.openStream(); ReadableByteChannel ic = Channels.newChannel(is); FileOutputStream os = new FileOutputStream(midPngFile); FileChannel oc = os.getChannel(); oc.transferFrom(ic, 0, Integer.MAX_VALUE); BufferedImage midImage = ImageIO.read(midPngFile); BufferedImage finalImage = (new ImageProcessor()).autocropImage(midImage); ImageIO.write(finalImage, "png", pngFile); midPngFile.delete(); } }