有没有办法判断字体是否支持Imagick中的给定字符?

时间:2013-12-16 14:26:31

标签: php fonts imagick

我正在使用Imagick生成简单的徽标,这些徽标只是背景上的文字。

我通常循环浏览所有可用的字体,向用户呈现每种字体的不同渲染选择(每种字体一个图像)。

问题是,某些字体不支持ASCII字符(我认为它们仅针对给定语言设计)。我猜一些支持ASCII字符的字体也会因非ASCII字符而失败。

无论如何,我最终得到的图像如下:

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

Imagick中是否有一种编程方式来判断给定字体是否支持给定字符串中的所有字符?

这可以帮助我过滤掉那些不支持用户输入的文字的字体,并避免显示任何垃圾图片,例如上面的垃圾图片。

1 个答案:

答案 0 :(得分:2)

我不知道使用imagemagik的方法,但你可以从这里使用php-font-parser库:

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