Skip to content

Instantly share code, notes, and snippets.

@sergmain
Created November 6, 2019 08:32
Show Gist options
  • Save sergmain/1cef9921c5d7b44b2ebb53795f63f54b to your computer and use it in GitHub Desktop.
Save sergmain/1cef9921c5d7b44b2ebb53795f63f54b to your computer and use it in GitHub Desktop.
Transform WMF -> SVG -> Jpeg with Batik
package images;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.ImageTranscoder;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.wmf.tosvg.WMFHeaderProperties;
import org.apache.batik.transcoder.wmf.tosvg.WMFTranscoder;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import java.io.*;
import java.util.zip.GZIPInputStream;
public class ImageBase64 {
public static final String BASE64 = "H4sIAAAAAAAEC71UTWgTQRR+M7uJbZqSn8aDv02Leij99eBBqGTzoy0lpTSBekuTuNaF7qY0lRo8\n" +
"KK1IESGePRVvgnjqQaGHSNGTorfi2atQsVtEBeP3drdUxR6k4OzOmzfvzbxv5s17b/PNq4fktNX2\n" +
"hNrSyuzXKUFglLeSSKUNR+sDlUKAMidks9l0uH5xxJO1YbWrDcqEutrehtkZf4iClC0uXMvX5nSi\n" +
"TxT1pEcJFppEYcwb4J6jT7cDWyFqgewbrHVgRJMqSB+gGTkmSX5RmOsA98TPXCsjS1f7TsR8xzH9\n" +
"LrthndsDPjT0FM4bpl6Nj+uL8cmKWbTo2dPtxRfo8cTOYsp3ddvFETgx0dkAb8JhyDQsekwXaF24\n" +
"CBtSlQdDkPAqfAFvsrtdJD6kUdvF2FJWD3wLF0Pui2GKkOre4/YPgKP9q6f2u0eyRs4LxeS0PE8H\n" +
"wxCer6QTDa6vOD4mS0ODg2OlXinu+BvUoI8iJhp4MPeN7iuP/sPdXnpx8Jv/BEdarmaWKrNEVmdg\n" +
"69T76L6RtvtGQdxoL+KG19ZWTqhJhRTOPc6hm0Kbm6tmL6ZSgvIIFe5pvWrMWPFc2dCtst4bH7XK\n" +
"/eQT5G9N57L5c0iQKcPSZmeTxapRTlWu6BPFGb1KEd+faRBRvONGfKnK9XlDn+ccoYiazcczNxbm\n" +
"i0jalq6BTD09oE3Y4dClgjbxufMk+MMhjeyMfdquJwvgwqEUD/WM3VMYseuOJIHx1ghUWk8hXcjY\n" +
"/GuhoCD+kMH4BBJBwQzOCLBseZJJCbJjRG2OxEDJERSQ6t1hGlYIpcURJ/fWyCUTu5YMJpaz2jP2\n" +
"yxpWsx3gwNImrUlaGcKGlUGPeMLlMcyXSyBLvVhMXAr4FQJOzeL9ezXKmYDwS/YJ6UV7mA45inWu\n" +
"TK+FlN25WnVBN4m4zrDFLrrnGOIqePlD1NuveNHODvl7G9fGR38CJwBmsbQFAAA=\n";
public static void main(String[] args) throws IOException, TranscoderException {
final byte[] bytes = Base64.decodeBase64(BASE64);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
GZIPInputStream gis = new GZIPInputStream(bais);
File data = new File("data", "08000002.wmf");
System.out.println("file: " + data.getAbsolutePath());
FileOutputStream fos = new FileOutputStream(data);
IOUtils.copy(gis, fos);
WMFHeaderProperties prop = new WMFHeaderProperties(data);
TranscoderInput input = new TranscoderInput(new FileInputStream(data));
File svg = new File("data", "08000002.svg");
System.out.println("file: " + svg.getAbsolutePath());
OutputStream stream = new FileOutputStream(svg);
TranscoderOutput output = new TranscoderOutput(stream);
WMFTranscoder transcoder = new WMFTranscoder();
// transcoder.addTranscodingHint(WMFTranscoder.KEY_WIDTH, 2560f);
transcoder.addTranscodingHint(WMFTranscoder.KEY_INPUT_WIDTH, prop.getWidthBoundsPixels());
transcoder.addTranscodingHint(WMFTranscoder.KEY_INPUT_HEIGHT, prop.getHeightBoundsPixels());
transcoder.addTranscodingHint(WMFTranscoder.KEY_XOFFSET, prop.getXOffset());
transcoder.addTranscodingHint(WMFTranscoder.KEY_YOFFSET, prop.getYOffset());
transcoder.transcode(input,output);
ImageTranscoder it = new JPEGTranscoder();
ByteArrayOutputStream jpg = new ByteArrayOutputStream();
it.transcode(new TranscoderInput(new FileInputStream(svg)), new TranscoderOutput(jpg));
File jpgFile = new File("data", "08000002.jpg");
IOUtils.write(jpg.toByteArray(), new FileOutputStream(jpgFile));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment