Modifiez SVG avec Java + Apache Batik et convertissez-le en PNG ou JPEG

Aperçu

--Modifier SVG avec Java + Apache Batik, convertir en PNG ou JPEG et sortie --Environnement: Apache Batik 1.13 + Java 15 (AdoptOpenJDK 15 + 36) + Gradle 6.6.1

Exemple de code

build.gradle

Écrivez pour exécuter dans Gradle. Décrivez la bibliothèque à utiliser.

plugins {
  id 'java'
  id 'application'
}

repositories {
  mavenCentral()
}

dependencies {
  //Module principal d'Apache Batik pour la conversion de SVG vers d'autres formats
  implementation 'org.apache.xmlgraphics:batik-transcoder:1.13'

  //Modules requis pour la sortie PNG et JPEG
  runtimeOnly 'org.apache.xmlgraphics:batik-codec:1.13'
}

application {
  mainClassName = 'MyApp'
}

MyApp.java

Lisez et modifiez les fichiers SVG et les sorties au format PNG, JPEG, SVG.

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import org.w3c.dom.Element;

// Apache Batik
import org.apache.batik.anim.dom.SAXSVGDocumentFactory;
import org.apache.batik.anim.dom.SVGDOMImplementation;
import org.apache.batik.transcoder.TranscoderException;
import org.apache.batik.transcoder.TranscoderInput;
import org.apache.batik.transcoder.TranscoderOutput;
import org.apache.batik.transcoder.image.JPEGTranscoder;
import org.apache.batik.transcoder.image.PNGTranscoder;
import org.apache.batik.transcoder.svg2svg.SVGTranscoder;
import org.apache.batik.util.XMLResourceDescriptor;

// Apache XML Commons External Components XML APIs Extensions (xml-apis-ext)
import org.w3c.dom.svg.SVGDocument;

public class MyApp {

  public static void main(String[] args) throws IOException, TranscoderException {

    //Construisez un URI à partir du chemin du fichier SVG que vous entrez
    URI inputUri = new File("input.svg").toURI();

    //SVGDocument est org.w3c.dom.Interface étendant le document
    SVGDocument doc = new SAXSVGDocumentFactory(
      XMLResourceDescriptor.getXMLParserClassName())
      .createSVGDocument(inputUri.toString());

    //Il est également possible d'éditer SVG
    //Ajoutons un élément de chemin ici
    Element path = doc.createElementNS(SVGDOMImplementation.SVG_NAMESPACE_URI, "path");
    path.setAttribute("id", "foo");
    path.setAttribute("d", "M 1000,2000 h 1000 v 1000 h -1000 z"); //Dessinez un carré
    path.setAttribute("style", "fill: #ff0000; stroke: #0000ff; stroke-width: 100");
    doc.getFirstChild().appendChild(path);

    //Générer un objet d'entrée pour la conversion
    TranscoderInput input = new TranscoderInput(doc);

    //Sortie dans divers formats
    outputPng(input, new File("output.png "));
    outputJpg(input, new File("output.jpg "));
    outputSvg(input, new File("output.svg"));
  }

  //Sortie en PNG
  private static void outputPng(TranscoderInput input, File outFile) throws IOException, TranscoderException {
    PNGTranscoder t = new PNGTranscoder();
    try (OutputStream os = new FileOutputStream(outFile)) {
      TranscoderOutput output = new TranscoderOutput(os);
      t.transcode(input, output);
    }
  }

  //Sortie au format JPEG
  private static void outputJpg(TranscoderInput input, File outFile) throws IOException, TranscoderException {
    JPEGTranscoder t = new JPEGTranscoder();
    t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, .8f);
    try (OutputStream os = new FileOutputStream(outFile)) {
      TranscoderOutput output = new TranscoderOutput(os);
      t.transcode(input, output);
    }
  }

  //Sortie en SVG
  private static void outputSvg(TranscoderInput input, File outFile) throws IOException, TranscoderException {
    SVGTranscoder t = new SVGTranscoder();
    try (OutputStream os = new FileOutputStream(outFile)) {
      OutputStreamWriter writer = new OutputStreamWriter(os, StandardCharsets.UTF_8);
      TranscoderOutput output = new TranscoderOutput(writer);
      t.transcode(input, output);
    }
  }
}

Méthode d'exécution

Mettez n'importe quel fichier d'entrée input.svg dans le même répertoire et exécutez-le avec gradle run.

$ gradle run

Matériel de référence

Apache Batik

Apache XML Commons External Components XML APIs Extensions

Recommended Posts

Modifiez SVG avec Java + Apache Batik et convertissez-le en PNG ou JPEG
Convertir des fichiers SVG en fichiers PNG en Java
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Agrégation de fenêtres de données de capteurs avec Apache Flink et Java 8
Importer des données Excel avec Java 2
Importer des données Excel avec Java
Importer des données Excel avec Java 3
Implémentation Java de tri-tree
Causes des erreurs répétées des données d'entrée singulières dans Hull Voronoi 3D
Modifiez SVG avec Java + Apache Batik et convertissez-le en PNG ou JPEG
Comment gérer les exceptions froidement avec Java 8 Stream ou en option
Convertir un tableau bidimensionnel au format csv avec l'API Java 8 Stream
Java pour jouer avec Function
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Comment convertir la base Java
[Java] Convertir ArrayList en tableau
Java pour apprendre avec les ramen [Partie 1]
[Java] Points à noter avec Arrays.asList ()
Convertissez Markdown en HTML avec flexmark-java
Osez défier Kaggle avec Java (1)
J'ai essayé d'interagir avec Java
[Java] Convertir 1 en N liste en carte
Java, des tableaux pour débuter avec les débutants
[Android] Convertir le code Java Android en Kotlin
[Java] Convertit un tableau en ArrayList * Attention