Enthalten Fonts eine Schreibcharakteristik?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2021 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • Enthalten Fonts eine Schreibcharakteristik?

    Hallo Leute!

    Ich brauche Eure Hilfe bei einem Thema, das auf den ersten Blick keinen Bezug zu iOS- / macOS-Entwicklung hat ... daher nur im "Smalltalk": Es dreht sich um Fonts, genauer gesagt die Charakteristika eines Schriftzeichens.

    Meine App soll Buchstaben "schraffieren" können (ja, es geht wieder um Stickmuster), dabei soll der geschriebene Charakter eines Zeichens erhalten bleiben. Gemeint ist die (übliche) Reihenfolge und Richtung, in der man die einzelnen Bestandteile eines Buchstabens schreibt. Natürlich ist mir bewusst, dass diese individuell variieren können, so schreibt vielleicht jemand ein grosses "E" in zwei, drei oder vier Zügen und kombiniert so den Längsstrich mit einem oder mehreren Querstrichen. Die Schraffur - eigentlich die Stickstriche - sollen nun quer zur Strichrichtung und in der richtigen Reihenfolge erstellt werden, so dass der fertige Buchstabe noch immer "geschrieben" erscheint.

    Hier als Beispiel ein "t" (bitte ignoriert die unterliegende Struktur):

    Man kann gut die drei Züge erkennen, wobei die Querstriche nach dem senkrechten erstellt werden.

    Nun endlich zur Frage: Geben die unter macOS / iOS verfügbaren Fonts diese Information her? Ich stelle mir so etwas wie einen Pfad vor, der unabhängig von der Schriftkontur beschreibt, wo beim Schreiben ein Stift angesetzt und wohin bewegt wird ... also ähnlich dem NSBezierPath mit moveTo... und addTo. Oder bin ich hier naiv?

    Es bleiben dann noch genügend Herausforderungen, z. B. der Füllalgorithmus, der entlang des Pfades begrenzt durch die Kontur ein Zickzack erzeugen muss, oder die Unterstruktur. Bevor ich aber die o. g. Frage nicht mit ja beantwortet habe, machten Überlegungen zu diesen Schritten wenig Sinn.

    Ich habe keinerlei Erfahrung mit den Interna und dem Handling von Fonts, kann mir einer oder eine von Euch weiterhelfen?

    Grüße, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Super, danke! Dann werde ich mich der Sache mal nähern ... spannendes, für mich neues Thema :)

    Mattes

    Edit: Ich hatte in erster Euphorie das Wort „Outline“ ignoriert. Das SO-Beispiel macht aber klar, dass mir dieser Ansatz für das ursprüngliche Problem nicht weiterhilft: Er wäre zwar später für die Kontur notwendig, aber mir fehlt die Information, wie das „P“ geschrieben wird, also z.B. erst der senkrechte Strich von oben nach unten, dann ein Bewegen des Stiftes nach oben und zeichnen des Bogens. Aber ich forsche weiter...
    Diese Seite bleibt aus technischen Gründen unbedruckt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MyMattes ()

  • Wenn du damit nicht klar kommst oder es nicht genug Möglichkeiten bietet, dann kannst du dir mal die Freetype lib ansehen (gibts wahrscheinlich nur in C aber das sollte ja kein Problem sein). Die habe ich mal benutzt um einen Videotitler zu programmieren. Dort kannst du die Buchstaben wirklich beliebige manipulieren auf verschiedenen Layern.
    War bisschen herausfordernd den Einstieg zu finden aber wenn man es mal verstanden hat ist es genial was man da alles machen kann.
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Hier ist ein interessanter Artikel, wie die Zeichenreihenfolge chinesischer Schriftzeichen aus TTFs ermittelt wird ... trivial ist das nicht. Ich bin leider wieder auf "Square One".

    Der Plan B ist, vordigitalisierte Buchstaben zu Wörtern / Monogrammen zusammenzufügen, aber schöner wäre halt, Schriften automatisch z. B. in Satinstiche zu digitalisieren.

    Ich recherchiere mal weiter, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • macmoonshine schrieb:

    Metafont von Knuth beruht meines Wissens auf der Schreiblinie.
    Gutes Stichwort, das zu diesem Tutorial führt: In Kapitel 0.5 ist gut das Prinzip anhand eines Beispiels beschrieben und ja, Metafonts basieren quasi auf der Schreibbewegung.

    Leider erfordert mein Anwendungsfall aber das Vorhandensein von "normalen" Font-Dateien: Der Anwender soll in der Applikation eine Schriftart (auf Basis eines installierten TrueTypeFonts o. ä.) auswählen und einen Text eingeben können. Das Programm soll diesen dann in entsprechende Satinstiche zum Sticken umwandeln: Die Zielgruppe wird kein gesondertes Font-Format (neben den systemseitigen) nutzen und ich wollte auch keine extra Fonts zur Verfügung stellen ... obwohl das ja auch ein Geschäftsmodell wäre :)

    Interessant finde ich den Ansatz im von mir oben verlinkten Artikel: Vektoren aus den Glyphs ermitteln und diese nach "Schreibpriorität" zu ordnen: Senkrecht vor waagerecht, von oben nach unten und links nach rechts, ... Letztlich muss ich abwägen, ob das Endergebnis den Aufwand rechtfertigt. Aber momentan bin ich noch in der Forschungs- und Findungsphase.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • also in der freetype lib bekommst du das Zeichen als bezier Pfad. Da müstest du dich ja eigentlich nur dran lang hangeln und entsprechend Zickzack Linien mit einem festen Offset in 90 aktuellen Punkt deine eigene „Sticklinie“ setzen. Das mit einem festen vorwärts Offset und fertig oder?
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • So ganz habe ich den "Offset" bei Dir oben nicht verstanden, aber prinzipiell sollte es reichen, über den Bezier-Pfad zu iterieren und dann wechselweise "rechts" und "links" im 90-Grad-Winkel einen Stichpunkt an der Grenze der Kontur zu setzen.

    Soweit zur Theorie, ich muss das noch verdauen und die Zeit zum Ausprobieren finden ... Freetype scheint ein Schritt in die richtige Richung zu sein.

    Danke Euch beiden, Mattes :)
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Thallius schrieb:

    also in der freetype lib bekommst du das Zeichen als bezier Pfad. Da müstest du dich ja eigentlich nur dran lang hangeln und entsprechend Zickzack Linien mit einem festen Offset in 90 aktuellen Punkt deine eigene „Sticklinie“ setzen. Das mit einem festen vorwärts Offset und fertig oder?
    Hallo Claus,

    kannst Du mir bei Gelegenheit vielleicht ein Stichwort nennen, Funktionen für diesen Pfad in der FreeType-API zu finden? Ich habe versucht, einen Überblick über das Framework zu bekommen und nur Referenzen zu Pfaden der Kontur gefunden...

    Hier steht übrigens eine gute Darstellung der verschiedenen Font-Typen auf Wikipedia. TTF etc. werden dabei klar als "outline-based" klassifiziert, was die entsprechenden Methoden / Funktionen in NSFont, CTFont - und meiner Vermutung nach auch in der FreeType-API - erklärt. Ich bin hingegen auf der Suche nach Informationen wie sie in "stroke-based" Fonts hinterlegt werden.

    Bis jetzt also nur Sackgassen und ohne irgendwelche Eingebungen werde ich wohl (wieder) auf den Plan B zurückfallen: Vordigitalisierte Buchstaben (Stickdateien) anhand einer Baseline zu Text kombinieren und ausrichten. Schade...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • ich bin mir nicht zu 100% sicher was du da suchst. Wenn du magst können wir gerne mal drüber reden und du erklärst es mir mit Worten. Ich kann auch gerne mal in meinem über 20 Jahre alten sourced folder suchen. Ich weiß nur, dass ich die lib damals benutzt habe um die fonts komplett zu verfremden. Dafür habe ich mir irgendwie die Layer geholt und damit gearbeitet. Aber wie das jetzt genau war weiß ich echt nicht mehr.

    wie gesagt, wenn du Lust hast schick mir ne pm dann geb ich dir meine Nummer und wir teamsen, Skype oder telefonieren mal.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    ich bin mir nicht zu 100% sicher was du da suchst. Wenn du magst können wir gerne mal drüber reden und du erklärst es mir mit Worten.
    Das kann ich verstehen - und Danke für Dein Angebot, auf das ich vielleicht noch einmal zurückkomme. Allerdings versuche ich noch einmal öffentlich mein Problem zu erklären: Vielleicht verrenne ich mich ja auch gerade in eine Sackgasse (das berühmte Brett vor'm Kopf) und jemand hat einen ganz anderen Lösungsansatz. Ausserdem hilft es mir, meine Gedanken zu sortieren :)

    Zielsetzung:

    Text - Wörter, Initialen - sollen aus einem beliebigen systemseitig verfügbaren Font in ein Maschinen-Stickmuster umgewandelt werden. Hierbei soll als Füllung zunächst ein "Satin-Stich" (vergleichbar einer Zickzack-Linie) verwendet werden (Beispiel im Anhang "t.jpg").

    Problem:

    Für das Erscheinungsbild der Stickerei macht die Stickreihenfolge einen Unterschied (Stiche überlagern sich, siehe Anhang "t.jpg"). Bei einem kleine "t" müsste z. B. erst der senkrechte, dann der waagerechte Strich gefüllt werden (stark vereinfacht, Unterstiche und unnötige Überlappungen ignoriert). Die systemseitigen Font-Arten unter macOS und iOS (z. B. TrueType) sind Outline-basiert und es fehlt die Information der Linienführung / -reihenfolge (Stroke, siehe hier in Wikipedia). Benötigt werden aber beide Informationen - Outline und Stroke, um die Ausrichtung, Länge und Reihenfolge der Satin-Stiche festlegen zu können (siehe Anhang "Lettering.jpg").

    Lösungsansätze:
    1. Verwendung von Fonts, welche auf der Stiftführung basieren (z. B. Metafont). Dies würde den Erwerb / die Distribution von extra Zeichensätzen erfordern, der Anwender soll aber systemseitig verfügbare Fonts verwenden können.
    2. Analysieren der Outlines, um eine (mögliche) Stiftführung zu ermitteln. Hierbei sind Annahmen über übliche Prioritäten zu tätigen. Das Vorgehen wird hier z. B. zum Analysieren chinesischer Schriftzeichen verwendet, ist ziemlich komplex, dürfte bei lateinischen Schriftzeichen aber zu vielen Edge-Cases führen (man denke z. B. an ein kleines "g") und bei Symbol-Fonts gänzlich versagen.
    3. Verwendung einer Bibliothek, welche die Outline-Analyse übernimmt. Hier hatte ich auf FreeType gehofft, aber laut Dokumentation finde ich keine entsprechenden Funktionen.
    4. Nutzung von Buchstaben, die bereits als Stickdateien vorliegen (vordigitalisiert). Solche kann der Benutzer bei diversen Anbietern erwerben. Die App erlaubt dann "nur" ein Importierten dieser Muster und Zuweisen zu einem Zeichen, sowie das Festlegen einer Basislinie zwecks Ausrichtung. Die Qualität des Ergebnisses hängt rein von den Ursprungsmustern ab, die Funktion ist sehr variabel nutzbar, setzt aber besagte Alphabete voraus.
    Wenn nicht jemandem eine geniale Idee einfällt, sehe ich nur den letzten Ansatz als praktikable Lösung. Aber vielleicht sehe ich auch den Wald vor lauter Bäumen nicht ... dann allerdings schon seit Jahren, die das Thema auf meiner Todo-Liste steht.

    Sorry for the book, Mattes
    Bilder
    • t.jpg

      4,66 kB, 86×124, 36 mal angesehen
    • Lettering.jpg

      112,46 kB, 600×683, 37 mal angesehen
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Thallius schrieb:

    kannst du den Buchstaben nich einfach aus lauter kleinen „Kreuzstichen“ erstellen? Also quasi den outline don’t mit lauter kleinen Kreuzen füllen?
    Das wäre ein anderes Füllmuster. Abgesehen davon, dass Maschinen-Stickmuster keine Kreuzstichmotive sind, wird für Monograme bei kleineren Schriften der Satinstich verwendet. Ich dachte auch an ein anderes Füllmuster, aber das würde auf wenig Akzeptanz stossen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Wolf schrieb:

    Wieso, nicht einfach den Anwender nachzeichnen lassen?
    Weil der Anwender Text eingeben und dann Stickmuster erhalten möchte. Dein Vorschlag würde technisch funktionieren, nicht aber die Anforderung erfüllen ... Ich lasse eine Funktion lieber weg, bevor die "User Experience" zu sehr leidet.

    Trotzdem danke, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.