如何将一个WMF文件转换为具有自定义输出分辨率的PNG/BMP/JPG格式?
示例:取WMF文件,输出2000x2000px的PNG文件。
您可以使用出色的Batik (http://xmlgraphics.apache.org/batik/)库来实现这一点。但是您需要遵循以下步骤:
- 使用WMF transcoder将WMF文件转换为SVG 使用JPGTranscoder将SVG转换为JGP
WMF>> SVG>> JPG
这里有一个关于coderanch的讨论:http://www.coderanch.com/t/422868/java/java/converting-WMF-Windows-Meta-File
WMF、EMF和EMF+是幻灯片的组成部分,因此我为它们开发了一个渲染器,作为Apache POI的一部分。至于即将到来的POI-4.1.2,这仍在进行中-如果你有任何渲染问题,请上传你的文件到我们的bugzilla的新bug报告。
主描述可以在POI文档中找到。
节选:
#1 -通过文件或stdin使用PPTX2PNG
对于文件系统访问,您需要首先将幻灯片/WMF/EMF/EMF+保存到磁盘中,然后使用相应的参数调用PPTX2PNG.main()
。
对于stdin
访问,您需要在
System.in
。/* the file content */
InputStream is = ...;
/* Save and set System.in */
InputStream oldIn = System.in;
try {
System.setIn(is);
String[] args = {
"-format", "png", // png,gif,jpg,svg or null for test
"-outdir", new File("out/").getCanonicalPath(),
"-outfile", "export.png",
"-fixside", "long",
"-scale", "800",
"-ignoreParse",
"stdin"
};
PPTX2PNG.main(args);
} finally {
System.setIn(oldIn);
}
#2 -通过*图片类渲染WMF/EMF/EMF+
File f = samples.getFile("santa.wmf");
try (FileInputStream fis = new FileInputStream(f)) {
// for WMF
HwmfPicture wmf = new HwmfPicture(fis);
// for EMF / EMF+
HemfPicture emf = new HemfPicture(fis);
Dimension dim = wmf.getSize();
int width = Units.pointsToPixel(dim.getWidth());
// keep aspect ratio for height
int height = Units.pointsToPixel(dim.getHeight());
double max = Math.max(width, height);
if (max > 1500) {
width *= 1500/max;
height *= 1500/max;
}
BufferedImage bufImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bufImg.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
wmf.draw(g, new Rectangle2D.Double(0,0,width,height));
g.dispose();
ImageIO.write(bufImg, "PNG", new File("bla.png"));
}
您可以使用不同的工具来处理此格式。例如,可以选择GIMP。在Java中有一个转换WMF文件的库
我在这里写了一个演练,对于Java,我学会了可以在回答这个问题后运行shell命令。对于WMF,请先按照此答案将其转换为EMF。