Bearbeiten Sie SVG mit Java + Apache Batik und konvertieren Sie es in PNG oder JPEG

Überblick

Beispielcode

build.gradle

Schreiben Sie, um in Gradle zu laufen. Beschreiben Sie die zu verwendende Bibliothek.

plugins {
  id 'java'
  id 'application'
}

repositories {
  mavenCentral()
}

dependencies {
  //Das Kernmodul von Apache Batik zur Konvertierung von SVG in andere Formate
  implementation 'org.apache.xmlgraphics:batik-transcoder:1.13'

  //Für die PNG- und JPEG-Ausgabe erforderliche Module
  runtimeOnly 'org.apache.xmlgraphics:batik-codec:1.13'
}

application {
  mainClassName = 'MyApp'
}

MyApp.java

Lesen und bearbeiten Sie SVG-Dateien und geben Sie sie in PNG, JPEG, SVG aus.

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 {

    //Erstellen Sie einen URI aus dem von Ihnen eingegebenen SVG-Dateipfad
    URI inputUri = new File("input.svg").toURI();

    //SVGDocument ist org.w3c.dom.Schnittstelle zur Erweiterung des Dokuments
    SVGDocument doc = new SAXSVGDocumentFactory(
      XMLResourceDescriptor.getXMLParserClassName())
      .createSVGDocument(inputUri.toString());

    //Es ist auch möglich, SVG zu bearbeiten
    //Fügen wir hier ein Pfadelement hinzu
    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"); //Zeichne ein Quadrat
    path.setAttribute("style", "fill: #ff0000; stroke: #0000ff; stroke-width: 100");
    doc.getFirstChild().appendChild(path);

    //Eingabeobjekt für die Konvertierung generieren
    TranscoderInput input = new TranscoderInput(doc);

    //Ausgabe in verschiedenen Formaten
    outputPng(input, new File("output.png "));
    outputJpg(input, new File("output.jpg "));
    outputSvg(input, new File("output.svg"));
  }

  //Ausgabe in 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);
    }
  }

  //Ausgabe in 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);
    }
  }

  //Ausgabe als 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);
    }
  }
}

Ausführungsmethode

Legen Sie eine beliebige Eingabedatei input.svg in dasselbe Verzeichnis und führen Sie sie mit gradle run aus.

$ gradle run

Referenzmaterial

Apache Batik

Apache XML Commons External Components XML APIs Extensions

Recommended Posts

Bearbeiten Sie SVG mit Java + Apache Batik und konvertieren Sie es in PNG oder JPEG
Konvertieren Sie SVG-Dateien in Java in PNG-Dateien
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
Fensteraggregation von Sensordaten mit Apache Flink und Java 8
Importieren Sie Excel-Daten mit Java 2
Importieren Sie Excel-Daten mit Java
Importieren Sie Excel-Daten mit Java 3
Java-Implementierung von Tri-Tree
Ursachen für wiederholte Singular-Eingabedatenfehler in Hull Voronoi 3D
Bearbeiten Sie SVG mit Java + Apache Batik und konvertieren Sie es in PNG oder JPEG
So behandeln Sie Ausnahmen mit Java 8 Stream oder Optional kühl
Konvertieren Sie ein zweidimensionales Array mit der Java 8 Stream-API in das CSV-Format
Java zum Spielen mit Function
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
So konvertieren Sie Java Base
[Java] Konvertiert ArrayList in Array
Java mit Ramen lernen [Teil 1]
[Java] Mit Arrays.asList () zu beachtende Punkte
Konvertieren Sie Markdown mit flexmark-java in HTML
Wagen Sie es, Kaggle mit Java herauszufordern (1)
Ich habe versucht, mit Java zu interagieren
[Java] Konvertiere 1 in N Liste in Karte
Java, Arrays für Anfänger
[Android] Konvertieren Sie Android Java-Code in Kotlin
[Java] Konvertieren Sie ein Array in ArrayList * Achtung