PHP获取ttf格式文件字体名的方法示例
网络编程 2021-07-04 23:24www.168986.cn编程入门
这篇文章主要介绍了PHP获取ttf格式文件字体名的方法,结合实例形式分析了php读取ttf字体文件属性的相关操作技巧,需要的朋友可以参考下
本文实例讲述了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相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家PHP程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程