Angeben einer Schriftart mit der Schriftfamilie mit ImageMagick

8

Ist es möglich, eine Schriftart mit der Schriftfamilie in ImageMagick zu rendern?

Ich habe alles versucht, was mir einfällt und nichts scheint zu funktionieren. Ich habe viel gesucht und ich kann anscheinend nichts finden, was dieses spezifische Problem angeht.

Ich benutze PHP, aber ich habe auch versucht, ImageMagick ohne Erfolg auf der Kommandozeile zu verwenden. Ich benutze ImageMagick 6.7.6 unter Linux. Hier ist, was ich bisher gemacht habe.

  • Ich habe die Schriftarten getestet, die ImageMagick mit Hilfe der identify -list font Befehl
  • Ich habe manuell eine Datei vom Typ type.xml erstellt, die auf den xml-Dateien basiert kam auf meinem System installiert
  • Ich habe eine type.xml-Datei mit diesem Skript erstellt: imagick_type_gen
  • Ich habe mit mehreren Schrifttypen getestet: ttf, otf, pfb, ttc

Hier ist die Beispielausgabe von identify -list font für einige Schriften, mit denen ich getestet habe:

%Vor%


Wenn ich den vollständigen Namen der Schriftart festlege, funktioniert alles wie erwartet:

%Vor%


Wenn ich jedoch versuche, die Schriftfamilie zu verwenden (beide aufgelistet in identify -list font und in type.xml aufgelistet), bekomme ich die Standard-Systemschrift:

%Vor%


Ich habe auch versucht, alle Parameter der Schriftart anzugeben, und es funktioniert wieder nicht:

%Vor%



Wenn ich einen ähnlichen Prozess durch PHP mache, gibt es tatsächlich einen Fehler zurück, sobald ich versuche, die Schriftfamilie des Zeichnungsobjekts zu setzen.

%Vor%

Dies ist der Fehler, der ausgelöst wird:

%Vor%



Genau wie bei der Befehlszeilenoption wird das Bild korrekt gerendert, wenn ich den vollständigen Namen der Schriftart festlege.

%Vor%



Von allem, was ich über die Konfiguration einer Schriftart für die Verwendung mit ImageMagick gefunden habe, sind die Schriftarten tatsächlich konfiguriert. Warum kann ich die Schriftarten nicht basierend auf der Schriftfamilie auswählen?

Ist das möglicherweise ein undokumentierter Fehler? Gibt es etwas, das mir fehlt?

Mir ist klar, dass ich einfach den vollständigen Namen der Schriftart angeben und damit fertig werden kann, aber es gibt einen speziellen Grund für mein Projekt, der es viel besser macht, die Schriftfamilie anzugeben.

Warum sollte die Schriftfamilie eine Option sein, wenn sie nicht funktioniert? Das sagt ImageMagick bezüglich der Schriftfamilien-Option:

  

Diese Einstellung schlägt eine Schriftfamilie vor, die ImageMagick verwenden sollte   zum Rendern von Text. Wenn die Familie gefunden werden kann, wird sie benutzt; wenn nicht, a   Standardschriftart (z. B. "Arial") oder eine Familie, von der bekannt ist, dass sie ähnlich ist   substituiert (z. B. "Courier" könnte verwendet werden, wenn "System" angefordert wird   aber nicht gefunden).

Irgendwelche Ideen sind sehr willkommen. An diesem Punkt bin ich ziemlich festgefahren.


BEARBEITEN:
Der Hauptgrund, warum ich lieber Schriftfamilien als vollständig benannte Schriftarten verwenden würde, liegt in der Eingabe, die ich verarbeite. Ich erhalte Dateien von Dritten, die bearbeitet werden müssen. Diese Dateien spezifizieren Schriften wie folgt:

%Vor%

Wenn ich den exakten Namen der Schriftart basierend auf diesen Informationen angeben müsste, müsste ich für jede mögliche Kombination aus Schriftfamilie und Attributen eine Zuordnung zum genauen Namen der Schriftart erstellen. Das wäre sehr schwierig zu verwalten, da Hunderte von Fonts zum System hinzugefügt werden.

Mir scheint, dass es einen Weg geben muss, ImageMagick dazu zu bringen, die exakte Schriftart basierend auf allen verfügbaren Details über die oben aufgelistete Schriftart abzurufen.

Wenn das nicht möglich ist, warum sollte ImageMagick dann überhaupt die Schriftfamilie angeben?

    
chawkinsuf 14.05.2012, 03:26
quelle

2 Antworten

2

Dies liegt daran, wie Schriftfamilien funktionieren; Zum Beispiel umfasst die "Arial" -Schriftart spezifische Schriftdefinitionen für fett, kursiv, unterstrichen usw. Sie müssen spezifisch sein, wenn Sie eine Schriftart für Ihre Bilder auswählen.

Ich vermute, dass Sie Folgendes tun könnten, wenn Sie wirklich wollten:

  1. Nimm den Namen der Schriftfamilie, ersetze Leerzeichen durch Bindestriche
  2. Wenn das funktioniert, großartig!
  3. Wenn nicht, füge -Regular an das Ende an und versuche es erneut

Aber Sie sollten nichts programmatisch mit der Schriftfamilie machen, es sei denn, Sie werden dazu gezwungen; -)

Meine Quelle von Imagick-Wissen kommt hauptsächlich von diesem Typ: Ссылка

    
Ja͢ck 14.05.2012 03:39
quelle
2

Hier ist eine Methode, die alle verfügbaren Imagick-Fonts als Bild (in den Browser) ausgibt

%Vor%

Sie sollten so etwas sehen:

    
Yaroslav 06.11.2014 09:34
quelle

Tags und Links