WMF EMF SVG PNG Java图片处理 EMFWMFSVGPNGFREEHEP
程序员文章站
2022-07-07 19:57:14
...
代码就示例贴点
工作需要转换难度大的就是EMF的转换了
使用的是freehep包
有需要的话可留言,联系我
EMF2SVG
WmfToSvg
SvgToImg
工作需要转换难度大的就是EMF的转换了
使用的是freehep包
有需要的话可留言,联系我
EMF2SVG
public class EmfToSVG extends EMFConverter { public static void main(String[] args) { String[] file = new String[2]; file[0] = "D:\\input.emf"; if (file == null || file.length == 0 || file[0] == null || file[0].length() == 0) { System.out.println("usage: EMF2SVG imput.emf [output.svg]"); return; } export(ImageConstants.SVG, file[0], file.length > 1 ? file[1] : null); } protected static void export(String type, String srcFileName, String destFileName) { try { List exportFileTypes = ExportFileType.getExportFileTypes(type); if (exportFileTypes == null || exportFileTypes.size() == 0) { System.out.println( type + " library is not available. check your classpath!"); return; } ExportFileType exportFileType = (ExportFileType) exportFileTypes.get(0); // read the EMF file EMFRenderer emfRenderer = new EMFRenderer( new EMFInputStream( new FileInputStream(srcFileName))); // create the destFileName, // replace or add the extension to the destFileName if (destFileName == null || destFileName.length() == 0) { // index of the beginning of the extension int lastPointIndex = srcFileName.lastIndexOf("."); // to be sure that the point separates an extension // and is not part of a directory name int lastSeparator1Index = srcFileName.lastIndexOf("/"); int lastSeparator2Index = srcFileName.lastIndexOf("\\"); if (lastSeparator1Index > lastPointIndex || lastSeparator2Index > lastPointIndex) { destFileName = srcFileName + "."; } else if (lastPointIndex > -1) { destFileName = srcFileName.substring( 0, lastPointIndex + 1); } // add the extension destFileName += type.toLowerCase(); } // TODO there is no possibility to use Constants of base class! /* create SVG properties*/ Properties p = new Properties(); p.put(SVGGraphics2D.EMBED_FONTS, Boolean.toString(false)); p.put(SVGGraphics2D.CLIP, Boolean.toString(true)); p.put(SVGGraphics2D.COMPRESS, Boolean.toString(false)); p.put(SVGGraphics2D.TEXT_AS_SHAPES, Boolean.toString(false)); p.put(SVGGraphics2D.FOR, "Freehep EMF2SVG"); p.put(SVGGraphics2D.TITLE, srcFileName); EMFPanel emfPanel = new EMFPanel(); emfPanel.setRenderer(emfRenderer); // TODO why uses this classes components?! exportFileType.exportToFile( new File(destFileName), emfPanel, emfPanel, p, "Freehep EMF converter"); } catch (Exception e) { e.printStackTrace(); } }
WmfToSvg
/** * @author LiJie * 将wmf转换为svg格式的 * * */ public class WmfToSvg { public void converter(byte[] wmfBytes, String dest) throws Exception { InputStream in = new ByteArrayInputStream(wmfBytes); WmfParser parser = new WmfParser(); final SvgGdi gdi = new SvgGdi(false); parser.parse(in, gdi); Document doc = gdi.getDocument(); OutputStream out = new FileOutputStream(dest); if (dest.endsWith(".svgz")) { out = new GZIPOutputStream(out); } output(doc, out,dest); } public void convert(String file,String dest) throws Exception{ InputStream in = new FileInputStream(file); WmfParser parser = new WmfParser(); final SvgGdi gdi = new SvgGdi(false); parser.parse(in, gdi); Document doc = gdi.getDocument(); OutputStream out = new FileOutputStream(dest); if (dest.endsWith(".svgz")) { out = new GZIPOutputStream(out); } output(doc, out,dest); } public byte[] encodeConvert() { return null; } private void output(Document doc, OutputStream out,String dest) throws Exception { TransformerFactory factory = TransformerFactory.newInstance(); Transformer transformer = factory.newTransformer(); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,"-//W3C//DTD SVG 1.0//EN"); transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"); transformer.transform(new DOMSource(doc), new StreamResult(out)); ByteArrayOutputStream bos = new ByteArrayOutputStream(); transformer.transform(new DOMSource(doc), new StreamResult(bos)); out.flush(); out.close(); //将svg直接转为jpg /*JPEGTranscoder it = new JPEGTranscoder(); ByteArrayOutputStream jpg = new ByteArrayOutputStream(); it.transcode(new TranscoderInput(new ByteArrayInputStream(bos.toByteArray())), new TranscoderOutput(jpg)); String jpgFile=dest.replaceAll("svg","jpg"); FileOutputStream jpgOut=new FileOutputStream(jpgFile); jpgOut.write(jpg.toByteArray()); jpgOut.flush();*/ } }
SvgToImg
/** * @author LiJie * 将svg转换为jpg,png格式的 * * */ public class SvgToImg { public void convert2JPEG(String file) throws TranscoderException, IOException { /*InputStream in = new FileInputStream(file); JPEGTranscoder transcoder = new JPEGTranscoder(); transcoder.addTranscodingHint(JPEGTranscoder.KEY_XML_PARSER_CLASSNAME, "org.apache.crimson.parser.XMLReaderImpl"); transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY,new Float(1.0)); TranscoderInput input = new TranscoderInput(in); OutputStream ostream = new FileOutputStream(file.substring(0,file.lastIndexOf("."))+".jpg"); TranscoderOutput output = new TranscoderOutput(ostream); transcoder.transcode(input, output); ostream.close(); ostream.flush();*/ JPEGTranscoder t = new JPEGTranscoder(); InputStream in = new FileInputStream(file); TranscoderInput input = new TranscoderInput(in); FileOutputStream outputStream = new FileOutputStream(new File( file.substring(0,file.lastIndexOf("."))+".jpg")); TranscoderOutput output = new TranscoderOutput(outputStream); t.transcode(input, output); outputStream.flush(); outputStream.close(); } /* public void convert2GIF(String file) throws TranscoderException, IOException{ GIFTranscoder t = new GIFTranscoder(); TranscoderInput input = new TranscoderInput(new FileInputStream(file)); OutputStream ostream = new FileOutputStream(file.substring(0,file.lastIndexOf("."))+".gif"); TranscoderOutput output = new TranscoderOutput(ostream); t.transcode(input, output); ostream.flush(); ostream.close(); }*/ public void convert2PNG(String file) { try { PNGTranscoder t = new PNGTranscoder(); InputStream in = new FileInputStream(file); TranscoderInput input = new TranscoderInput(in); FileOutputStream outputStream = new FileOutputStream(new File( file.substring(0,file.lastIndexOf("."))+".png")); TranscoderOutput output = new TranscoderOutput(outputStream); t.transcode(input, output); outputStream.flush(); outputStream.close(); } catch (Exception ex) { ex.printStackTrace(); } } /** * 将svg字符串转换为png * * @param svgCode svg代码 * @param pngFilePath 保存的路径 * @throws TranscoderException svg代码异常 * @throws IOException io错误 */ public static void convertToPng(String svgCode, String pngFilePath) throws IOException, TranscoderException { File file = new File(pngFilePath); FileOutputStream outputStream = null; try { file.createNewFile(); outputStream = new FileOutputStream(file); convertToPng(svgCode, outputStream); } finally { if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 将svgCode转换成png文件,直接输出到流中 * * @param svgCode svg代码 * @param outputStream 输出流 * @throws TranscoderException 异常 * @throws IOException io异常 */ public static void convertToPng(String svgCode, OutputStream outputStream) throws TranscoderException, IOException { try { byte[] bytes = svgCode.getBytes("utf-8"); PNGTranscoder t = new PNGTranscoder(); TranscoderInput input = new TranscoderInput(new ByteArrayInputStream(bytes)); TranscoderOutput output = new TranscoderOutput(outputStream); t.transcode(input, output); outputStream.flush(); } finally { if (outputStream != null) { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static void main(String[] args) { try { convertToPng("D:\\input.svg", "D:\\output.png"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TranscoderException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
下一篇: 男人该如何养生