2013-12-16 7 views
19

Ich verwende Imagick, um einfache Logos zu generieren, die nur Text auf einem Hintergrund sind.Gibt es eine Möglichkeit festzustellen, ob eine Schriftart einen bestimmten Zeichen in Imagick unterstützt?

Ich bin in der Regel durchlaufen alle verfügbaren Schriftarten, um den Benutzer mit einer Auswahl von verschiedenen Renderings für jede Schriftart (ein Bild pro Schriftart) zu präsentieren.

Das Problem ist, einige Schriftarten unterstützen nicht die ASCII-Zeichen (ich denke, dass sie nur für eine bestimmte Sprache entwickelt wurden). Und ich denke, dass einige der Schriften, die ASCII-Zeichen unterstützen, auch mit Nicht-ASCII-Zeichen ausfallen.

Wie auch immer, habe ich am Ende mit Bildern wie diese oben:

Imagick non-supported font characters Imagick non-supported font characters Imagick non-supported font characters

Gibt es eine programmatische Art und Weise in Imagick zu sagen, ob eine bestimmte Schriftart all Zeichen in einem String unterstützt ?

Das würde mir helfen, jene Zeichensätze herauszufiltern, die den Text nicht unterstützen, den der Benutzer eintippte, und vermeiden, irgendwelche Abfallbilder wie die oben genannten anzuzeigen.

+0

Nach ein bisschen Googeln sieht es zweifelhaft aus - es scheint, dass Sie die Schriftart-Datei direkt analysieren müssen, was nicht trivial ist. –

+0

@Pekka 웃 Ich würde das auf jeden Fall vermeiden ... Vielleicht gibt es andere Bibliotheken als Imagick, um TTF-Fonts abzufragen, hoffentlich wird jemand Licht darauf bringen! – Benjamin

+0

Möglicherweise nicht in PHP. Es gibt Werkzeuge auf der * nix Befehlszeile: [Erhalten Unterstützte Unicode-Bereiche von Font * .ttf Datei auf Ubuntu] (http://superuser.com/q/409317) Aber anscheinend sind sie sogar nicht 100% zuverlässig –

Antwort

2

Ich weiß nicht, einen Weg ImageMagik verwenden, aber man konnte die PHP-font-Parser-Bibliothek von hier verwenden:

https://github.com/Pomax/PHP-Font-Parser

Insbesondere Sie in einer Schriftart für jeden Buchstaben analysieren kann Ihre erforderlich String und überprüfen Sie den Rückgabewert:

$fonts = array("myfont.ttf"); 

    /** 
    * For this test, we'll print the header information for the 
    * loaded font, and try to find the letter "g". 
    */ 
    $letter = "g"; 
    $json = false; 
    while($json === false && count($fonts)>0) { 
      $font = new OTTTFont(array_pop($fonts)); 
      echo "font header data:\n" . $font->toString() . "\n"; 
      $data = $font->get_glyph($letter); 
      if($data!==false) { 
        $json = $data->toJSON(); }} 

    if($json===false) { die("the letter '$letter' could not be found!"); } 
    echo "glyph information for '$letter':\n" . $json; 

Above Code stammt aus den Font-Parser Projekte fonttest.php Klasse:

https://github.com/Pomax/PHP-Font-Parser/blob/master/fonttest.php

Verwandte Themen