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.nio.channels.Channels;
import java.nio.channels.FileChannel;
import javax.imageio.ImageIO;
import com.patch.html_to_png_server.renderers.helpers.ImageProcessor;
/*
* Renders using "webkit2png" on OSX.
*
* See http://github.com/paulhammond/webkit2png/tree/master
*/
public class Webkit2PngRenderer extends AbstractRenderer {
private static File scriptFile;
public Webkit2PngRenderer() throws IOException {
super();
}
@Override
public void generatePngFile() throws IOException {
File midPngFile =
File.createTempFile("html_to_png_webkit2png_mid", "-full.png");
midPngFile.deleteOnExit();
String midPngFilePath = midPngFile.getAbsolutePath();
String midPngFilePrefix =
midPngFilePath.substring(0, midPngFilePath.length() - 9);
ProcessBuilder pb = new ProcessBuilder(
"python",
getScriptFile().getPath(),
htmlFile.toURI().toURL().toString(),
"-o", midPngFilePrefix,
"-W", "1024", "-H", "768",
"-F");
System.err.println("About to start process");
Process p = pb.start();
System.err.println("Started process");
try {
p.waitFor();
} catch (InterruptedException e) {
p.destroy();
throw new IOException(e);
}
System.err.println("Process complete");
BufferedImage midImage = ImageIO.read(midPngFile);
BufferedImage finalImage =
(new ImageProcessor()).autocropImage(midImage);
ImageIO.write(finalImage, "png", pngFile);
midPngFile.delete();
}
private static File getScriptFile() throws IOException {
if (scriptFile != null) return scriptFile;
scriptFile = File.createTempFile("html_to_png_ie-webkit2png", ".py");
scriptFile.deleteOnExit();
InputStream is = IERenderer.class.getResourceAsStream("webkit2png.py");
FileChannel scriptChannel =
new FileOutputStream(scriptFile).getChannel();
scriptChannel.transferFrom(
Channels.newChannel(is), 0, Integer.MAX_VALUE);
is.close();
scriptChannel.close();
return scriptFile;
}
}