c1b4907a848024bbcbbc9d3bc6c9614c8eb30245
[scilab.git] / scilab / modules / helptools / src / java / org / scilab / modules / helptools / image / SVGImageConverter.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - Calixte DENIZET
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 package org.scilab.modules.helptools.image;
14
15 import java.io.File;
16 import java.io.FileInputStream;
17 import java.io.FileNotFoundException;
18 import java.io.FileOutputStream;
19 import java.io.IOException;
20 import java.io.OutputStream;
21 import java.io.StringReader;
22 import java.util.Map;
23
24 import org.apache.batik.transcoder.TranscoderException;
25 import org.apache.batik.transcoder.TranscoderInput;
26 import org.apache.batik.transcoder.TranscoderOutput;
27 import org.apache.batik.transcoder.Transcoder;
28 import org.apache.batik.transcoder.image.ImageTranscoder;
29 import org.apache.batik.transcoder.image.PNGTranscoder;
30
31 /**
32  * SVG to PNG converter
33  */
34 public class SVGImageConverter implements ExternalImageConverter {
35
36     private static SVGImageConverter instance;
37
38     private SVGImageConverter() { }
39
40     /**
41      * {@inheritDoc}
42      */
43     public String getMimeType() {
44         return "image/svg";
45     }
46
47     /**
48      * Since this a singleton class...
49      * @return this
50      */
51     public static ExternalImageConverter getInstance() {
52         if (instance == null) {
53             instance = new SVGImageConverter();
54         }
55
56         return instance;
57     }
58
59     /**
60      * {@inheritDoc}
61      */
62     public String convertToImage(String currentFile, String svg, Map<String, String> attributes, File imageFile, String imageName) {
63         return convertToPNG(new TranscoderInput(new StringReader(svg)), imageFile, imageName);
64     }
65
66     /**
67      * {@inheritDoc}
68      */
69     public String convertToImage(File svg, Map<String, String> attributes, File imageFile, String imageName) {
70         try {
71             return convertToPNG(new TranscoderInput(new FileInputStream(svg)), imageFile, imageName);
72         } catch (FileNotFoundException e) {
73             System.err.println("Problem when exporting SVG to " + imageFile + "!\n" + e.toString());
74         }
75
76         return null;
77     }
78
79     /**
80      * Make really the conversion from svg to png
81      */
82     private static String convertToPNG(TranscoderInput input, File imageFile, String imageName) {
83         Transcoder trans = new PNGTranscoder();
84         trans.addTranscodingHint(ImageTranscoder.KEY_FORCE_TRANSPARENT_WHITE, Boolean.TRUE);
85
86         try {
87             OutputStream os = new FileOutputStream(imageFile);
88             TranscoderOutput output = new TranscoderOutput(os);
89             trans.transcode(input, output);
90             os.flush();
91             os.close();
92             return "<img src=\'" + imageName + "\'/>";
93         } catch (Exception e) {
94             System.err.println("Problem when exporting SVG to " + imageFile + "!\n" + e.toString());
95         }
96
97         return null;
98     }
99 }