返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP获取ttf格式文件字体名的方法
  • 260
分享到

PHP获取ttf格式文件字体名的方法

2023-06-14 08:06:20 260人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关PHP获取ttf格式文件字体名的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件

这篇文章将为大家详细讲解有关PHP获取ttf格式文件字体名的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件格式,在日常使用过程中的使用也在所难免。

<?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编码漏字的BUGstring(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格式文件字体名的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: PHP获取ttf格式文件字体名的方法

本文链接: https://lsjlt.com/news/269262.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作