温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用PHP怎么获取ttf格式文件的字体名

发布时间:2021-02-05 18:08:35 来源:亿速云 阅读:329 作者:Leah 栏目:开发技术

这期内容当中小编将会给大家带来有关使用PHP怎么获取ttf格式文件的字体名,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

具体如下:

<?php $names = GetFontName('c:/windows/fonts/FZHPJW.TTF'); foreach ($names as $name) {   if ($name['language'] == 1033)     $code = 'utf-16le';   elseif ($name['language'] == 2052) $code = 'utf-16be';   var_dump(mb_convert_encoding($name['name'],'utf-8',$code)); } function GetFontName($FilePath) {   $fp = fopen($FilePath, 'r');   if ($fp) {     //TT_OFFSET_TABLE     $meta = unpack('n6', fread($fp, 12));     //检查是否是一个true type字体文件以及版本号是否为1.0     if ($meta[1] != 1 || $meta[2] != 0)       return FALSE;     $Found = FALSE;     for ($i = 0; $i < $meta[3]; $i++) {       //TT_TABLE_DIRECTORY       $tablemeta = unpack('N4', $data = fread($fp, 16));       if (substr($data, 0, 4) == 'name') {         $Found = TRUE;         break;       }     }     if ($Found) {       fseek($fp, $tablemeta[3]);       //TT_NAME_TABLE_HEADER       $tablecount = unpack('n3', fread($fp, 6));       $Found = FALSE;       for ($i = 0; $i < $tablecount[2]; $i++) {         //TT_NAME_RECORD         $table = unpack('n6', fread($fp, 12));         if ($table[4] == 1) {           $npos = ftell($fp);           fseek($fp, $n = $tablemeta[3] + $tablecount[3] + $table[6], SEEK_SET);           $fontname = trim($x = fread($fp, $table[5]));           if (strlen($fontname) > 0) {             $names[] = array (                 'platform' => $table[1], //平台(操作系统)     'language' => $table[3], //字体名称的语言     'encoding' => $table[2], //字体名称的编码     'name' => $fontname //字体名称             );             //break;           }           fseek($fp, $npos, SEEK_SET);         }       }     }     fclose($fp);   }   return $names; } ?>

运行结果:

string(6) "SimHei"
string(5) "SimHe" //貌似有UTF-16LE编码漏字的BUG
string(6) "黑体"

注:如果这里仅需要获取字体名称,可将上述代码进行改进如下:

<?php $names = GetFontName('c:/windows/fonts/FZHPJW.TTF'); $newnames = array(); foreach ($names as $name) {   if ($name['language'] == 1033)     $code = 'utf-16le';   elseif ($name['language'] == 2052) $code = 'utf-16be';   array_push($newnames,@mb_convert_encoding($name['name'], 'utf-8', $code)); } $font_name=array_pop($newnames); echo $font_name; function GetFontName($FilePath) {   $fp = fopen($FilePath, 'r');   if ($fp) {     //TT_OFFSET_TABLE     $meta = unpack('n6', fread($fp, 12));     //检查是否是一个true type字体文件以及版本号是否为1.0     if ($meta[1] != 1 || $meta[2] != 0)       return FALSE;     $Found = FALSE;     for ($i = 0; $i < $meta[3]; $i++) {       //TT_TABLE_DIRECTORY       $tablemeta = unpack('N4', $data = fread($fp, 16));       if (substr($data, 0, 4) == 'name') {         $Found = TRUE;         break;       }     }     if ($Found) {       fseek($fp, $tablemeta[3]);       //TT_NAME_TABLE_HEADER       $tablecount = unpack('n3', fread($fp, 6));       $Found = FALSE;       for ($i = 0; $i < $tablecount[2]; $i++) {         //TT_NAME_RECORD         $table = unpack('n6', fread($fp, 12));         if ($table[4] == 1) {           $npos = ftell($fp);           fseek($fp, $n = $tablemeta[3] + $tablecount[3] + $table[6], SEEK_SET);           $fontname = trim($x = fread($fp, $table[5]));           if (strlen($fontname) > 0) {             $names[] = array (                 'platform' => $table[1], //平台(操作系统)     'language' => $table[3], //字体名称的语言     'encoding' => $table[2], //字体名称的编码     'name' => $fontname //字体名称             );             //break;           }           fseek($fp, $npos, SEEK_SET);         }       }     }     fclose($fp);   }   return $names; } ?>

则此时可直接输出:

黑体

上述就是小编为大家分享的使用PHP怎么获取ttf格式文件的字体名了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI