一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP獲取ttf格式文件字體名的方法示例

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

2019-06-05 11:13老虎會游泳服務器之家 PHP教程

這篇文章主要介紹了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], //平臺(操作系統(tǒng))
    '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], //平臺(操作系統(tǒng))
    'language' => $table[3], //字體名稱的語言
    'encoding' => $table[2], //字體名稱的編碼
    'name' => $fontname //字體名稱
            );
            //break;
          }
          fseek($fp, $npos, SEEK_SET);
        }
      }
    }
    fclose($fp);
  }
  return $names;
}
?>

則此時可直接輸出:

黑體

希望本文所述對大家PHP程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美一区二区三区久久久 | 国产成人一区二区三区影院免费 | 东北疯狂xxxxbbbb中国 | 羞羞私人影院可以直接免费观影吗 | 男人天堂bt | 欧美性色欧美a在线播放 | 男人在线网址 | 91夜夜人人揉人人捏人人添 | 日本视频在线观看播放 | 72张让男人一看就硬的图片 | 青青青国产成人久久111网站 | 五月天黄网 | 国内久久 | 99爱在线观看精品视频 | 日本性生活大片 | 欧美1区 | 亚洲男人天堂网站 | 99久久国产综合精品1尤物 | 北条麻妃一区 | 久久AV国产麻豆HD真实乱 | 王淑兰与铁柱全文免费阅读 | 国产麻豆剧果冻传媒观看免费视频 | brazzers欧美教师 | 禁漫H天堂免费A漫 | 亚洲午夜久久久久国产 | 喷出奶汁了h | 欧美一级一级做性视频 | 免费看日产一区二区三区 | 奇米久草| 好爽视频 | 国产女主播在线播放一区二区 | 国产精品国产三级国产专区不 | 欧美精品综合一区二区三区 | 日本高清在线观看天码888 | 无遮挡h肉动漫在线观看电车 | 国产做a爰片久久毛片 | 午夜精品在线 | 久久水蜜桃亚洲AV无码精品偷窥 | 国产aⅴ一区二区三区 | 国内精品在线观看视频 | 国产欧美日韩一区二区三区在线 |