国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP獲取ttf格式文件字體名的方法示例

2024-05-05 00:07:11
字體:
來源:轉載
供稿:網友

本文實例講述了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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 襄汾县| 临朐县| 闸北区| 醴陵市| 永顺县| 昌江| 汉阴县| 三原县| 山阴县| 依兰县| 潮安县| 金平| 乌拉特中旗| 镇雄县| 贺兰县| 芮城县| 紫云| 浠水县| 钟山县| 凭祥市| 泸州市| 静宁县| 东方市| 六枝特区| 福州市| 怀柔区| 南城县| 溧阳市| 远安县| 新干县| 崇义县| 仲巴县| 霍邱县| 贵溪市| 虹口区| 达尔| 原阳县| 临城县| 宁明县| 宣威市| 石嘴山市|