最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2019年03月06日 15:22:22   作者:老虎會(huì)游泳  
這篇文章主要介紹了PHP獲取ttf格式文件字體名的方法,結(jié)合實(shí)例形式分析了php讀取ttf字體文件屬性的相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了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));
    //檢查是否是一個(gè)true type字體文件以及版本號(hào)是否為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ái)(操作系統(tǒng))
    'language' => $table[3], //字體名稱的語言
    'encoding' => $table[2], //字體名稱的編碼
    'name' => $fontname //字體名稱
            );
            //break;
          }
          fseek($fp, $npos, SEEK_SET);
        }
      }
    }
    fclose($fp);
  }
  return $names;
}
?>

運(yùn)行結(jié)果:

string(6) "SimHei"
string(5) "SimHe" //貌似有UTF-16LE編碼漏字的BUG
string(6) "黑體"

注:如果這里僅需要獲取字體名稱,可將上述代碼進(jìn)行改進(jìn)如下:

<?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));
    //檢查是否是一個(gè)true type字體文件以及版本號(hào)是否為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ái)(操作系統(tǒng))
    'language' => $table[3], //字體名稱的語言
    'encoding' => $table[2], //字體名稱的編碼
    'name' => $fontname //字體名稱
            );
            //break;
          }
          fseek($fp, $npos, SEEK_SET);
        }
      }
    }
    fclose($fp);
  }
  return $names;
}
?>

則此時(shí)可直接輸出:

黑體

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php文件操作總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • php輸出全球各個(gè)時(shí)區(qū)列表的方法

    php輸出全球各個(gè)時(shí)區(qū)列表的方法

    這篇文章主要介紹了php輸出全球各個(gè)時(shí)區(qū)列表的方法,自定義了一個(gè)數(shù)組變量用于存放全球各個(gè)時(shí)區(qū)信息,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • PHP中怎樣保持SESSION不過期 原理及方案介紹

    PHP中怎樣保持SESSION不過期 原理及方案介紹

    本文主要討論WEB SESSION,其一般有兩種:客戶端SESSION和服務(wù)器端SESSION,后一種最常見的屬于Java Beans提供的
    2013-08-08
  • 利用PHP+JS實(shí)現(xiàn)搜索自動(dòng)提示(實(shí)例)

    利用PHP+JS實(shí)現(xiàn)搜索自動(dòng)提示(實(shí)例)

    本篇文章對(duì)利用PHP+JS實(shí)現(xiàn)搜索自動(dòng)提示的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP命名空間與自動(dòng)加載機(jī)制的基礎(chǔ)介紹

    PHP命名空間與自動(dòng)加載機(jī)制的基礎(chǔ)介紹

    這篇文章主要給大家介紹了關(guān)于PHP命名空間與自動(dòng)加載機(jī)制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用PHP具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • php中inlcude()性能對(duì)比詳解

    php中inlcude()性能對(duì)比詳解

    PHP程序員最常用的兩個(gè)函數(shù)莫過于require_once和include了,通過這兩個(gè)函數(shù),我們可以使用其他類庫(kù)中定義的類等對(duì)象。但很多人在使用包含相同目錄下的其他文件時(shí),僅僅簡(jiǎn)單使用下面的代碼進(jìn)行文件引用
    2012-09-09
  • php ci框架中加載css和js文件失敗的解決方法

    php ci框架中加載css和js文件失敗的解決方法

    在將html頁(yè)面整合到ci框架里面的時(shí)候,加載css和js失敗,下面對(duì)這個(gè)問題進(jìn)行分析及解決
    2014-03-03
  • PHP彈出對(duì)話框技巧詳細(xì)解讀

    PHP彈出對(duì)話框技巧詳細(xì)解讀

    我們?cè)趯?shí)現(xiàn)PHP彈出對(duì)話框之后,一般還需要返回原來頁(yè)面或者用新的頁(yè)面替換原來的頁(yè)面等,本文將會(huì)講解詳細(xì)代碼編寫,需要的朋友可以參考下
    2015-09-09
  • PHP面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法簡(jiǎn)單示例

    PHP面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法簡(jiǎn)單示例

    這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法,結(jié)合具體實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)中繼承的相關(guān)概念、原理、使用技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-12-12
  • PHP中Static(靜態(tài))關(guān)鍵字功能與用法實(shí)例分析

    PHP中Static(靜態(tài))關(guān)鍵字功能與用法實(shí)例分析

    這篇文章主要介紹了PHP中Static(靜態(tài))關(guān)鍵字功能與用法,結(jié)合實(shí)例形式分析了Static關(guān)鍵字功能、以及靜態(tài)屬性、靜態(tài)變量等相關(guān)使用技巧,需要的朋友可以參考下
    2019-04-04
  • php獲取文件大小的方法

    php獲取文件大小的方法

    這篇文章主要介紹了php獲取文件大小的方法,需要的朋友可以參考下
    2014-02-02

最新評(píng)論

双江| 襄垣县| 仁布县| 大方县| 南投市| 乐平市| 壶关县| 红河县| 城口县| 湄潭县| 门源| 乐东| 东兰县| 荃湾区| 永定县| 临高县| 新竹市| 奎屯市| 阿拉善盟| 萨迦县| 视频| 洱源县| 三台县| 苍梧县| 双城市| 临洮县| 栾川县| 靖江市| 红河县| 扶风县| 惠安县| 清原| 博兴县| 泽库县| 恭城| 奈曼旗| 高阳县| 巨野县| 常山县| 德钦县| 丹阳市|