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

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

发布时间:2021-02-05 18:08:35

来源:亿速云

阅读:76

作者: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 

//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 

//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 

//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 

//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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值