2013-12-16 11 views
19

Sto usando Imagick per generare semplici loghi, che sono solo testo su uno sfondo.C'è un modo per dire se un font supporta un determinato personaggio in Imagick?

Di solito sono in loop tutti i tipi di carattere disponibili, per presentare all'utente una scelta di diversi rendering per ogni carattere (un'immagine per carattere).

Il problema è che alcuni caratteri non supportano i caratteri ASCII (penso che siano stati progettati solo per una determinata lingua). E suppongo che alcuni dei caratteri che supportano i caratteri ASCII falliranno anche con caratteri non ASCII.

In ogni caso, io alla fine con le immagini come queste:

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

C'è un modo programmatico in Imagick per dire se un determinato tipo di carattere supporta tutti i caratteri di una stringa ?

Questo mi aiuterebbe a filtrare quei tipi di carattere che non supportano il testo digitato dall'utente e ad evitare la visualizzazione di immagini inutili come quelle sopra.

+0

Dopo un po 'di ricerca su Google, sembra incerto: sembra che tu debba analizzare direttamente il file del carattere, il che non è banale. –

+0

@Pekka 웃 Eviterei sicuramente di farlo ... Forse ci sono altre librerie oltre a Imagick per interrogare i font TTF, speriamo che qualcuno possa far luce su questo! – Benjamin

+0

Forse non in PHP. Ci sono strumenti sulla riga di comando * nix: [Ottieni intervalli Unicode supportati dal file Font * .ttf su Ubuntu] (http://superuser.com/q/409317) Ma a quanto pare anche loro non sono affidabili al 100% –

risposta

2

non so un modo utilizzando ImageMagik, ma si potrebbe utilizzare la libreria php-font-parser da qui:

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

In particolare, è possibile analizzare un tipo di carattere per ogni lettera di vostro richiesto corda e controllare il valore di ritorno:

$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; 

Sopra codice proviene dai progetti di carattere parser fonttest.php classe:

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

Problemi correlati