2013-12-16 45 views
19

我使用Imagick來生成簡單的徽標,它們只是背景上的文本。有沒有辦法判斷一個字體是否支持Imagick中的給定字符?

我通常循環所有可用的字體,以向用戶呈現每種字體(每種字體一個圖像)的不同渲染選擇。

問題是,一些字體不支持ASCII字符(我認爲它們只是爲給定的語言設計的)。我猜想某些支持ASCII字符的字體也會失敗,並顯示非ASCII字符。

不管怎麼說,我最終圖像,如這些:

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

是否有Imagick一個綱領性的方式告訴給定的字體是否支持給定的字符串中的所有字符?

這將幫助我過濾掉那些不支持用戶輸入的文本的字體,並避免顯示上面那些垃圾圖像。

+0

經過一番Google搜索後,它看起來令人懷疑 - 看起來你不得不直接解析字體文件,這是不平凡的。 –

+0

@Pekka웃我肯定會避免這樣做...也許除了Imagick之外,還有其他庫可以查詢TTF字體,希望有人會對此有所瞭解! – Benjamin

+0

可能不在PHP中。 * nix命令行上有一些工具:[從Ubuntu的Font * .ttf文件獲取支持的Unicode範圍](http://superuser.com/q/409317)但顯然它們不是100%可靠的 –

回答

2

使用imagemagik我不知道的一種方式,但你可以使用PHP-字體解析庫從這裏:

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

具體來說,您可以解析的字體在您需要的每個字母串並檢查返回值:

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

上面的代碼來自字體解析器項目fonttest.php類:

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

相關問題