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

2021-02-06 17:03:47 184 0
tangjin

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

具体如下:

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

<?php
$names=GetFontName('c:/windows/fonts/FZHPJW.TTF');
foreach($namesas$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));
}
functionGetFontName($FilePath){
$fp=fopen($FilePath,'r');
if($fp){
//TT_OFFSET_TABLE
$meta=unpack('n6',fread($fp,12));
//检查是否是一个truetype字体文件以及版本号是否为1.0
if($meta[1]!=1||$meta[2]!=0)
returnFALSE;
$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编码漏字的BUGstring(6) "黑体"

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

<?php
$names=GetFontName('c:/windows/fonts/FZHPJW.TTF');
$newnames=array();
foreach($namesas$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;
functionGetFontName($FilePath){
$fp=fopen($FilePath,'r');
if($fp){
//TT_OFFSET_TABLE
$meta=unpack('n6',fread($fp,12));
//检查是否是一个truetype字体文件以及版本号是否为1.0
if($meta[1]!=1||$meta[2]!=0)
returnFALSE;
$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格式文件的字体名了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注恰卡编程网行业资讯频道。

收藏
分享
海报
0 条评论
184
上一篇:怎么在PHP中碳钢设置BugFree获取邮箱通知 下一篇:Java 程序员应该掌握的 JVM 知识

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码