Introduce SVG to PNG converter
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 3 May 2022 13:11:50 +0000 (15:11 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 3 May 2022 13:11:50 +0000 (15:11 +0200)
org.argeo.app.core/src/org/argeo/app/image/SvgToPng.java [new file with mode: 0644]

diff --git a/org.argeo.app.core/src/org/argeo/app/image/SvgToPng.java b/org.argeo.app.core/src/org/argeo/app/image/SvgToPng.java
new file mode 100644 (file)
index 0000000..38aeb91
--- /dev/null
@@ -0,0 +1,64 @@
+package org.argeo.app.image;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+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.PNGTranscoder;
+import org.apache.commons.io.FilenameUtils;
+
+public class SvgToPng {
+
+       public void convertSvgDir(Path sourceDir, Path targetDir, int width) {
+               System.out.println("##\n## " + width + "px - " + sourceDir+"\n##");
+               try {
+                       if (targetDir == null)
+                               targetDir = sourceDir.getParent().resolve(Integer.toString(width));
+                       Files.createDirectories(targetDir);
+
+                       PNGTranscoder transcoder = new PNGTranscoder();
+                       // transcoder.addTranscodingHint(ImageTranscoder.KEY_BACKGROUND_COLOR,
+                       // Color.WHITE);
+                       transcoder.addTranscodingHint(PNGTranscoder.KEY_WIDTH, (float) width);
+                       transcoder.addTranscodingHint(PNGTranscoder.KEY_HEIGHT, (float) width);
+
+                       for (Path source : Files.newDirectoryStream(sourceDir, "*.svg")) {
+                               String baseName = FilenameUtils.getBaseName(source.toString());
+                               Path target = targetDir.resolve(baseName + ".png");
+                               convertSvgFile(transcoder, source, target);
+                       }
+               } catch (IOException | TranscoderException e) {
+                       throw new IllegalStateException("Cannot convert from " + sourceDir + " to " + targetDir, e);
+               }
+
+       }
+
+       protected void convertSvgFile(ImageTranscoder transcoder, Path source, Path target)
+                       throws IOException, TranscoderException {
+               try (Reader reader = Files.newBufferedReader(source); OutputStream out = Files.newOutputStream(target);) {
+                       TranscoderInput input = new TranscoderInput(reader);
+//                     BufferedImage image = transcoder.createImage(32, 32);
+                       TranscoderOutput output = new TranscoderOutput(out);
+                       transcoder.transcode(input, output);
+                       System.out.println(source.getFileName() + " -> " + target);
+               }
+       }
+
+       public static void main(String[] args) throws Exception {
+
+               Path path = Paths.get(args[0]);
+
+               SvgToPng svgToPng = new SvgToPng();
+               svgToPng.convertSvgDir(path, null, 16);
+               svgToPng.convertSvgDir(path, null, 32);
+               svgToPng.convertSvgDir(path, null, 64);
+               svgToPng.convertSvgDir(path, null, 96);
+       }
+}