it-swarm.com.de

Wie konvertiert man eine Bitmap-Schriftart (.FON) in eine TrueType-Schriftart (.TTF)?

Mein Programm (win32, Delphi) muss bestimmte Zeichen in einigen Tabellenspalten anzeigen. Dafür verwende ich eine spezielle Schriftart für diese Spalten. Ich habe die Schrift von meinem Kunden bekommen. Es ist eine .FON-Schriftart. Es funktioniert gut auf dem Bildschirm, aber ich bekomme oft Probleme, sobald ich etwas drucken möchte.

Ich möchte diese .FON-Schriftart in eine TrueType-Schriftart (.TTF) konvertieren, um die Probleme zu vermeiden. Es ist mir egal, ob die Schrift nicht gut skaliert wird. Ich sollte genau gleich aussehen, wenn sie auf dem Bildschirm mit der gleichen Größe wie die Standardgröße der ursprünglichen Schriftart verwendet wird. Weiß jemand einen Weg, dies zu tun?

(Es wird keine Quellcodelösung benötigt. Die Schriftart ändert sich nicht. Es reicht, wenn ich ein Werkzeug finde, um es zu tun.)

Edit: Ideal wäre es, eine TrueType-Schriftart zu erhalten, bei der jedes Pixel der ursprünglichen Schriftart in ein vektorielles schwarzes Quadrat umgewandelt wird (ich habe es getestet, indem ich einige Zeichen manuell neu zeichnete, dies funktioniert wie gewünscht).

Edit 2, verwendete Lösung: Mit FontForge + Autotrace und dann manuell Korrekturen vornehmen Ich konnte eine Vektorschriftart erhalten, die der Umrisslinie der Pixel der Bitmapschriftart folgt. Diese Vektorschriftart skaliert etwas besser als die ursprüngliche Schriftart und löst meine Druckprobleme. Einzelheiten finden Sie in dem akzeptierten Post.

Ich bin aber trotzdem interessiert, ob jemand eine vollautomatische Lösung kennt.

18
Name

Verwenden Sie FontForge + Autotrace und nehmen Sie dann einige Korrekturen manuell vor.

Integrieren Sie zuerst Autotrace in Fontforge, siehe Autotracing-Bitmaps in FontForge . So habe ich es gemacht, da ich die win32-Version von FontForge nicht verwenden konnte:

  1. Laden Sie herunter, entpacken und starten Sie Portable Ubuntu Tres . Es ist eine spezielle Linux-Version, die unter Windows funktioniert!
  2. Wählen Sie System-> Administration-> Add/Remove Applications, suchen Sie nach FontForge und installieren Sie es (Administratorkennwort lautet 123456). Ich habe FontForge Version 20090622 installiert.
  3. Laden Sie autotrace-0.31.1.tar.gz von http://autotrace.sourceforge.net/index.html#download herunter und kopieren Sie es in Ihr Home-Verzeichnis in Portable Ubuntu.
  4. Wählen Sie in Portable Ubuntu Applications-> Accessories-> Terminal, um Autotrace zu kompilieren und zu installieren:

    Sudo bash  (password is 123456)
    gunzip autotrace-0.31.1.tar.gz
    tar xf autotrace-0.31.1.tar
    cd autotrace-0.31.1
    ./configure
    make
    make install
    

Dann konvertiere deine Schrift:

  1. Starten Sie FontForge in Portable Ubuntu und öffnen Sie die Schriftart .FON.
  2. Speichern Sie Ihre Schriftart als .BDF-Schriftart (Das Laden einer .FON-Datei als Hintergrund hat für mich nicht funktioniert, daher musste ich die Schriftart zuerst konvertieren.): Datei-> Generate Fonts und wählen Sie BDF als Format.
  3. Erstellen Sie eine neue Schriftart und importieren Sie die BDF-Schriftart als Hintergrundschrift: Datei-> Importieren. Vergessen Sie nicht, "Als Hintergrund" auszuwählen.
  4. Wählen Sie alle Zeichen aus und starten Sie ein Autotrace, während Sie die Umschalttaste gedrückt halten, um Parameter für das Autotrace einzugeben. Ich habe folgende Parameter verwendet, die die Erkennung der Umrisse der Pixel verbessert haben, aber ich habe keine perfekten Parameter gefunden:

    -corner-surround=1 -line-threshold=10
    
  5. Korrigieren Sie die Zeichen manuell, hauptsächlich mit der Funktion "Kurvenpunkt hinzufügen" . Durch Aktivieren von Ansicht -> Anzeigen -> Fast horizontale/vertikale Linien wird die Arbeit erheblich vereinfacht.
  6. Erstellen Sie eine TrueType-Schriftart: Datei-> Generate Fonts und wählen Sie TrueType als Format.
15
Name

Ich weiß, dass diese Frage alt ist, aber für das, was es wert ist, konnte ich problemlos eine alte .fon in .ttf mit PixFont konvertieren. Ich habe es als Administrator ausgeführt (keine Installationen - eine alte, ausführbare Datei an der richtigen Stelle), und es wurde eine gute TTF generiert, obwohl das ursprüngliche .fon einige korrekte Glyphen fehlte.

Und obwohl es nicht umsonst ist, ist es bei 29 Dollar fast der Fall, vor allem im Vergleich zu den sehr teuren kommerziellen Produkten. 

9

Für diejenigen, die fontforge (für Windows) nicht kompilieren möchten, laden Sie sich hier einen Download herunter: http://www.mpetroff.net/software/fontforge-windows/

Dieser Build verwendet Potrace anstelle von Autotrace. Die besten Parameter, die ich für die Schriftart, die ich konvertierte (vgasys.fon) erhielt, waren:

--turdsize 0 --opttolerance 0 --unit 1 --longcurve --gamma 0 --blacklevel 0 --cleartext

Es dauerte noch Stunden der manuellen Arbeit, um die Schrift gut aussehen zu lassen (durch Hinzufügen und Entfernen von Punkten).

6
Mogu

Mit FontForge konnte ich eine entsprechende TrueType-Schriftart generieren, die bei Verwendung der richtigen Größe genau die gleichen Zeichen wie die ursprüngliche Schriftart enthält. Möglicherweise muss ich noch einige Optionen anpassen, da ich meine ursprüngliche Schriftart bei size = 11 verwendet habe. Die neue Schrift funktioniert nur bei size = 10.5, was in Delphi nicht verwendet werden kann. Die Schrift sieht bei jeder anderen Größe wirklich schrecklich aus.

  1. Laden Sie die .FON-Schriftart in FontForge
  2. Wählen Sie Datei-> Schriftarten generieren
  3. Wählen Sie als Typ "(gefälschte) MS-Bitmap nur sfnt (ttf)", geben Sie einen Dateinamen ein und klicken Sie auf "Speichern".

Anscheinend nutzt es die Möglichkeit, Bitmap-Schriften in einer Truetype-Schrift zu speichern. Die resultierende Schriftart hat nicht die Probleme, die ich mit den Bitmap-Schriftarten hatte, aber sie ist auf dem Drucker vollständig leer, sodass sie mein Problem nicht löst.

Ein Hinweis zu FontForge :Ich habe es nicht geschafft, die Windows-Version von FontForge (basierend auf cygwin) zu installieren. Stattdessen installierte ich Portable Ubuntu Tres , Dies ist eine Linux-Version, die unter Windows funktioniert. Es ist einfach zu installieren: Entpacken Sie die Datei und starten Sie das Exe. Wählen Sie dann System-> Administration-> Add/Remove Applications aus hat die FontForge-Version 20090622 installiert.

4
Name

Möglicherweise kann das Befehlszeilentool SBIT32 von Microsoft verwendet werden. Es ist einfach, die .FON-Datei mit FontForge in eine .BDF-Datei zu konvertieren. Dann müssen Sie jedoch eine Metrikdatei (.MET) schreiben. Ich habe es nicht ausprobiert, weil ich davon ausgehe, dass ich eine Truetype-Schriftart mit eingebetteten Bitmaps-Schriftarten erhalten würde, und es ist möglich, solche Schriftarten direkt mit FontForge (type "(gefälschte) MS-Bitmap nur sfnt (ttf) zu erzeugen ) "unter Datei-> Schriftarten generieren).

2
Name

Ich habe festgestellt, dass der einfachste Weg, eine gute TTF-Version eines FON zu erhalten, die Verwendung eines der kostenlosen Online-Bitmap-Font-Editoren ist. Sie müssen jede Glyphe manuell eingeben, aber der Vorgang ist viel einfacher als sich mit FontForge auseinanderzusetzen. Ich kenne zwei Editoren, die beide TTFs erstellen, die unter Windows und Linux einwandfrei funktionieren.

BitFontMaker ist der einfachere der beiden. Ich mag die saubere Oberfläche, aber am Ende habe ich sie nicht verwendet, weil Monospaced-Schriftarten nur eine Zellenbreite von 10 bis 14 Pixel haben können.

FontStruct erfordert eine Registrierung und verwendet eine Flash-Schnittstelle. Nachdem ich mich an die Benutzeroberfläche gewöhnt hatte, konnte ich ziemlich schnell neue Schriftarten erstellen. (Es könnte ein Zufall sein, aber ich habe bei dem E-Mail-Konto, das ich registriert habe, einen Spam-Aufwärtstrend festgestellt.)

Beide Editoren legen den Zeilenabstand automatisch fest. Um die gewünschten Abstände zu ermitteln, müssen Sie ein hohes Pixel zu einem Zeichen hinzufügen und dann mit einem Vektor-Schriftart-Editor aus der TTF entfernen. (Type light funktioniert gut und ist viel einfacher zu verwenden als FontForge.)

2
user3720403

Laut der Produktbeschreibung BitFonter 3.0 scheint das zu können:

"Leistungsfähige Konvertierung von Bitmaps und Bitmap-Schriftarten von und nach Typ 1, TrueType und OpenType-Schriftarten durch Integration mit FontLab Studio und TypeTool."

Es ist jedoch ein bisschen teuer, nur 999 US-Dollar zu konvertieren.

1
Name

Ich fand mich auf der Suche nach diesen Schriftarten für ein Projekt, an dem ich gerade arbeite. Bei dem Gedanken, alle Glyphen wie in den anderen Antworten erwähnt manuell zu bearbeiten, suchte ich weiter. Schließlich bin ich auf eine Site gestoßen, die sowohl die ursprüngliche Schriftart als auch einige neuere .ttf-Varianten hat. Wenn Sie sich nicht darum kümmern, dass einige der Glyphen neu zugeordnet wurden (sie sind alle noch vorhanden), ist dies eine schöne Alternative: Oldschool PC Fonts . Als zusätzlichen Bonus für mich ergänzten diese Unterstützung lateinische, griechische, kyrillische und hebräische Schriften sowie eine Reihe zusätzlicher Glyphen und Unicode-Symbole.

1
datatype_void

Es ist unwahrscheinlich, dass Sie dies mit einem einfachen kostenlosen Tool erreichen können. http://www.fontlab.com Werkzeuge haben, um es zu tun, aber sie sind sehr teuer.

1
Strelok

Ich musste eine Menge Ärger machen, um die Lösung zu finden, die für mich funktionierte.

Autotrace scheint eine pixelgenaue Ausgabe zu liefern, wenn die Eingabe skaliert ist. Nach meiner Erfahrung funktioniert die Skalierung mindestens 8x perfekt.

Die Skalierung der Eingabe ist durch das Schließen der Software zu kompliziert.

Bitfonter kann bdf-Schriften (die Unicode unterstützen) öffnen und skalieren. Das Problem mit der Demoversion ist, dass die Hälfte der Glyphen beim Exportieren "beschädigt" wird (Pixel werden zufällig entfernt), und dies führt dazu, dass Autotrace erneut eine unerwünschte Ausgabe erzeugt. Aber ich habe bemerkt, dass es ein Muster gibt, bei dem Zeichen "verfälscht" sind: Die ersten und zweiten Glyphen sind verfälscht, die dritten und vierten nicht, die fünften und sechsten sind verfälscht und so weiter. Also habe ich eine ergänzende bdf-Datei erstellt, indem ich sie erneut skaliert und dann die ersten beiden Glyphen entfernt habe. Dann können Sie diese beiden in FontForge kombinieren: Öffnen Sie beide Ausgabedateien, "Neu codieren" in "Codieren" in "Glyphenreihenfolge", wählen Sie alle in Ausgabe2 und kopieren Sie sie, klicken Sie in Ausgabe1 auf die dritte Glyphe und drücken Sie Strg + Umschalt + V. Dadurch werden beide Ausgabedateien kombiniert und alle Zeichen, mit Ausnahme der ersten beiden Glyphen, die manuell erstellt werden können, werden einwandfrei skaliert. Speichern Sie das Ergebnis.

Führen Sie die "Autotrace" für diese skalierte Ausgabe aus. Verwenden Sie dann für alle Glyphen, Element\Transformations\Transform, die folgenden Einstellungen: Ursprung: Glyphenursprung, Einheitlich skalieren ... die Umkehrung dessen, was Sie zuvor im Bdf skaliert haben (im Fall einer 8-fachen Skalierung sind das 12,5%).

Es gibt mehr Punkte als nötig. Dies kann mit Element\Simplify\Simplify behoben werden. Dies vereinfacht die Gliederung. In diesem speziellen Fall, in dem die Umrisse nur aus horizontalen und vertikalen Linien bestehen, sollte diese Operation verlustfrei sein.

Nach all dem bemerkte ich, dass die Glyphen scheinbar keine Unicode-Informationen enthielten. Öffnen Sie die Schriftart, die genau die Zeichen der resultierenden Schriftart enthält, verwenden Sie Encoding\Reencode\ISO 10646-1 (Unicode, BMP) für diese Schriftart und anschließend Compact. Kopieren Sie dann alle Zeichen der Schriftart mit den richtigen Umrissen in die Schriftart mit den richtigen Unicode-Codierungen.

Wenn Sie einem Schritt nicht folgen können, lassen Sie mich wissen, was passiert. Das ist wirklich zu kompliziert und es war eine Menge Aufwand, die Effekte jedes einzelnen Tools, das ich finden konnte, zu nutzen und zu kombinieren, aber ich fand die Lösung. Es ist automatisiert, was es für Schriften mit vielen Zeichen einfacher macht, als alle Zeichen manuell neu zu zeichnen. Dies sollte für alle hilfreich sein, die Bitmap-Glyphen zeichnen und eine gültige Bitmap-Schriftartdatei haben, diese aber noch nicht verwenden können.

0

Ich konnte Autotrace nicht zum Laufen bringen, also schrieb ich ein Python-Skript, um Schwarzweißbilder in Vektorpolygone zu verfolgen, eines für jedes Pixel.

Mit einem Ordner mit Glyphenbildern können Sie ihn also in einen Ordner mit svg-Dateien konvertieren.

Dann in Inkscape Vereinigung + vereinfachen Sie den Pfad zum Bereinigen jeder Glyphe. (Möglicherweise in der Befehlszeile mit Inkscape möglich)

Importieren Sie schließlich die entsprechende svg für jede Glyphe in FontForge.

-> Skript gehostet bei Gist.gisthub.com

from PIL import Image
import svgwrite
import os
import argparse


def bmp_to_svg(filename, multiply =1):

    img = Image.open(filename)
    w, h = img.size
    pixel_acc = img.load()

    generated_paths = paths_gen(pixel_acc, w,h, multiply=multiply)

    dwg = svgwrite.Drawing(profile='tiny')
    for path in generated_paths:
        options = path
        kwoptions = {} #{"fill":"black"}
        dwg.add(dwg.polygon(options, **kwoptions))

    #clip_path = dwg.defs.add(dwg.clipPath())
    #clip_path.add(dwg.Rect(insert=(0,0), size=((w*multiply)+1, (h*multiply)+1)))
    return dwg

def paths_gen(pixel_acc, w, h, multiply = 1):
    m = multiply
    paths = []
    for y in range(0,h):
        for x in range(0,w):
            pix = pixel_acc[x,y]
            brightval = sum(pix) /3
            if brightval < 128:
                paths.append([
                        ##top left
                        (x * m, y * m),
                        ##top right
                        ((x+1) * m, y * m),
                        ##bottom right
                        ((x+1) * m, (y+1) * m),
                        ##bottom list
                        ((x) * m, (y+1) * m),
                        ##close back to top left
                        #(x, y), 
                    ])
    return paths


def main():
    parser = argparse.ArgumentParser(
        description='Script to convert black and white images into vector art')
    parser.add_argument("input_dir")
    parser.add_argument("ouput_dir")
    parser.add_argument("in_ext", default="bmp", help="file extension of images in input folder")
    parser.add_argument("-m", "--multiply", default=1, type=int)
    ## TODO
    #parser.add_argument("-u", "--union", store=True, help="unifies adjecent polgons")
    #parser.add_argument("-s", "--simplify", store=True, help="removes points that are part of a straight line")
    #parser.add_argument("-c", "--compress", store=True, help="same as '--union --simplify'")

    args = parser.parse_args()


    cdir = os.path.abspath(args.input_dir)

    fn_gen = ( x for x in os.listdir(cdir)
                 if x.endswith('.'+args.in_ext)
             )

    for count, filename in enumerate(fn_gen):

        full_filename =  os.path.join(cdir, filename)

        new_fn = "{}_.svg".format(filename)
        new_fullfn =  os.path.join(args.ouput_dir, new_fn)


        svg = bmp_to_svg(full_filename, multiply=args.multiply)
        print "Converted file: '{}'".format(full_filename)
        svg.filename = new_fullfn
        svg.save()

if __== '__main__':
    main()
0
Zv_oDD