Font 2 Vektor

Status
Nicht offen für weitere Antworten.

inflamer

Bekanntes Mitglied
Abend!

kennt jemand eine Möglichkeit unter Java bzw. vielleicht eine geeignete Bibliothek, die imstande wäre, TrueType-Fonts zu Vektoren umzuwandeln, die sich dann idealerweise auch noch als vektororientierte Grafik speichern lassen? (Letzteres ist aber kein Muss.)

Danke!
 

kaie

Bekanntes Mitglied
Um einen kompletten Zeichensatz oder eine Folge von Buchstaben in eine Vektor-Datei umzuwandeln, muss man sich die Zeichen zunächst in Glyphen (also einzelne formatierte Zeichen) wandeln lassen. Den Umriss dieser Glyphen kann man dann in einen Shape konvertieren, der dann über einen PathIterator durchlaufen werden kann.

Die einzelnen Segmente eines Pfades bestehen dann aus Linien, quadratischen oder kubischen Kurven oder Sprüngen. Diese könnte man sich dann beispielsweise in einen SVG-Pfad umwandeln lassen:

Code:
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;

public class FontConverter
{
    public static void main(String[] args)
    {
        // die Schriftart
        Font f = new Font("Arial", Font.ITALIC + Font.BOLD, 32);
        // der Text
        String text = "Hallo Java-Forum!";
        // die Ausgabedatei
        String dateiname = "c:\\test.svg";

        // FontRenderContext erzeugen (das Bild ist nur da, um ein Graphics-Objekt zu erhalten)
        BufferedImage bi = new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB);
        FontRenderContext frc = ((Graphics2D) bi.getGraphics())
                .getFontRenderContext();

        // PathIterator für die Glyphen erzeugen
        GlyphVector gv = f.createGlyphVector(frc, text);
        PathIterator p = gv.getOutline().getPathIterator(null);

        // BoundingBox holen (für die SVG-ViewBox)
        Rectangle2D r = gv.getLogicalBounds();

        // SVG-Kopf erzeugen
        String s = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"no\"?>\n";
        s += "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1 Tiny//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd\">\n";
        s += "<svg version=\"1.1\" baseProfile=\"tiny\" xmlns=\"http://www.w3.org/2000/svg\" ";
        s += "width=\"21cm\" viewBox=\"" + r.getMinX() + " " + r.getMinY()
                + " " + r.getWidth() + " " + r.getHeight() + "\">\n";
        s += "<path d=\"";

        // einzelne Segmente des PathIterators in SVG-Kommandos umwandeln
        double[] d = new double[6];
        while (!p.isDone())
        {
            int type = p.currentSegment(d);
            if (type == PathIterator.SEG_MOVETO)
                s += "M" + d[0] + "," + d[1] + " ";
            if (type == PathIterator.SEG_LINETO)
                s += "L" + d[0] + "," + d[1] + " ";
            if (type == PathIterator.SEG_CUBICTO)
                s += "C" + d[0] + "," + d[1] + " " + d[2] + "," + d[3] + " "
                        + d[4] + "," + d[5] + " ";
            if (type == PathIterator.SEG_QUADTO)
                s += "Q" + d[0] + "," + d[1] + " " + d[2] + "," + d[3] + " ";
            if (type == PathIterator.SEG_CLOSE)
                s += "Z";
            p.next();
        }

        // SVG abschliessen
        s += "\"/>\n</svg>";

        // Datei speichern
        try
        {
            PrintWriter out = new PrintWriter(new FileWriter(dateiname));
            out.println(s);
            out.close();
        } catch (Exception e)
        {
        }

        // Ergebnis anzeigen
        System.out.println("SVG-Datei wurde geschrieben!\n\n" + s);
    }

}

Nach Ausführen des Programms liegt im aktuellen Verzeichnis eine Datei "test.svg", die man mit einem beliebigen SVG-Viewer oder einem Vektor-Grafikprogramm (CorelDraw, Adobe Illustrator) öffnen kann. Hoffe, das hilft Dir weiter.

kaie
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
0 Ist "sequence.fallback" aus den font.properties zur Laufzeit änderbar AWT, Swing, JavaFX & SWT 0
I Anderes (schlechteres) Font-Rendering in OpenJDK 8 AWT, Swing, JavaFX & SWT 21
Splayfer Custom Font in AttributedString Java AWT, Swing, JavaFX & SWT 4
L JavaFX Eigene Font benutzen AWT, Swing, JavaFX & SWT 6
B AWT Font Größenverhältnisse AWT, Swing, JavaFX & SWT 2
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
L Font für Dashboard AWT, Swing, JavaFX & SWT 3
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
S Swing JColorChooser Font ändern AWT, Swing, JavaFX & SWT 2
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
A AWT TTF-Datei zu Font-Objekt finden? AWT, Swing, JavaFX & SWT 5
Y Globale Font-Color definieren AWT, Swing, JavaFX & SWT 5
F java.awt.Font - ist das wirklich alles? AWT, Swing, JavaFX & SWT 3
Luk10 Ungewollte Unicode Characters im Font AWT, Swing, JavaFX & SWT 5
S Font laden, Wort zeichnen und animieren..? AWT, Swing, JavaFX & SWT 2
M Font Size in FormsEditor AWT, Swing, JavaFX & SWT 2
F Font in JTable setzen AWT, Swing, JavaFX & SWT 7
1 Font ändern AWT, Swing, JavaFX & SWT 5
I Textbreite von Font inklusive Tabs ermitteln AWT, Swing, JavaFX & SWT 4
T Swing Font für alle Komponenten ändern AWT, Swing, JavaFX & SWT 2
Dit_ Font durchgestrichen AWT, Swing, JavaFX & SWT 6
B Welche Font Family ist vorhanden? AWT, Swing, JavaFX & SWT 3
N Swing JEditorPane mit Farbe und Font AWT, Swing, JavaFX & SWT 2
G Frame,Font,Standard,Schriftart,JFrame AWT, Swing, JavaFX & SWT 3
M JSpinner Font ändern AWT, Swing, JavaFX & SWT 4
H anderes font in textarea AWT, Swing, JavaFX & SWT 2
Schandro Den größten passenden java.awt.Font zu einem Rectangle berechnen AWT, Swing, JavaFX & SWT 2
D Font laden AWT, Swing, JavaFX & SWT 2
T Font mit Border AWT, Swing, JavaFX & SWT 7
Fu3L Wie Schriftfarbe und Font global setzen? AWT, Swing, JavaFX & SWT 5
J Font Änderung nach Editorwechsel? AWT, Swing, JavaFX & SWT 3
A Font: Ist Schriftart überall verfügbar? AWT, Swing, JavaFX & SWT 4
I font-größe ermitteln AWT, Swing, JavaFX & SWT 4
S jTable Font einer Zelle ändern AWT, Swing, JavaFX & SWT 5
StephenKing Font-Größe in JTextField normalisieren AWT, Swing, JavaFX & SWT 6
DEvent Standard Font-Auswahl-Dialog? AWT, Swing, JavaFX & SWT 15
I GUI - Font und Labelklick AWT, Swing, JavaFX & SWT 6
S JTree - Renderer - Font AWT, Swing, JavaFX & SWT 3
R Schriftfarbe ändern in JTextArea / Font bekommen AWT, Swing, JavaFX & SWT 2
V Font setzen in JLabel AWT, Swing, JavaFX & SWT 6
M Schwieriges Label - Font - Problem "Dynamisches Label&a AWT, Swing, JavaFX & SWT 7
TheJavaKid font lässt sich bei der jtextarea nur einmal ändern AWT, Swing, JavaFX & SWT 3
G Font in JTextArea ändern AWT, Swing, JavaFX & SWT 2
V falscher Unicode font AWT, Swing, JavaFX & SWT 6
S Hilfe bei java.awt.Font AWT, Swing, JavaFX & SWT 7
H Create Font will nicht AWT, Swing, JavaFX & SWT 5
G Font tiefergestellt AWT, Swing, JavaFX & SWT 2
G Font nur für einen Teil String im JTextArea AWT, Swing, JavaFX & SWT 5
H Liste von Font Sizes und Colors AWT, Swing, JavaFX & SWT 4
D Font eines JLabels verändern, JLabel mit LookAndFeel-Format AWT, Swing, JavaFX & SWT 2
B Font fett setzen AWT, Swing, JavaFX & SWT 2
T Projekt - ChatClient - JEditorPane - Smilies, Vektor AWT, Swing, JavaFX & SWT 2
A Vektor in Anonyme Klasse übergeben AWT, Swing, JavaFX & SWT 2
D JTextFields in Vektor: index auslesen AWT, Swing, JavaFX & SWT 10
G linie / vektor zeichnen AWT, Swing, JavaFX & SWT 2
P Vektor-Grafik im XML-Format speichern AWT, Swing, JavaFX & SWT 39
G JTable mit Vektor-Konstruktor erzeugen?! AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben