So erhalten Sie den Schriftartnamen einer TTF-Formatdatei in PHP

autoload
Freigeben: 2023-03-09 07:04:02
nach vorne
2676 Leute haben es durchsucht

 TTF(TrueTypeFont)是Apple公司和MicrosoftDas vom Unternehmen gemeinsam eingeführte Schriftartdateiformat hat sich mit der Beliebtheit von Windows zum am häufigsten verwendeten Schriftartdateiformat entwickelt und ist im täglichen Gebrauch unumgänglich.

<?php
$names = GetFontName(&#39;c:/windows/fonts/FZHPJW.TTF&#39;);
foreach ($names as $name) {
  if ($name[&#39;language&#39;] == 1033)
    $code = &#39;utf-16le&#39;;
  elseif ($name[&#39;language&#39;] == 2052) $code = &#39;utf-16be&#39;;
  var_dump(mb_convert_encoding($name[&#39;name&#39;],&#39;utf-8&#39;,$code));
}
function GetFontName($FilePath) {
  $fp = fopen($FilePath, &#39;r&#39;);
  if ($fp) {
    //TT_OFFSET_TABLE
    $meta = unpack(&#39;n6&#39;, 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(&#39;N4&#39;, $data = fread($fp, 16));
      if (substr($data, 0, 4) == &#39;name&#39;) {
        $Found = TRUE;
        break;
      }
    }
    if ($Found) {
      fseek($fp, $tablemeta[3]);
      //TT_NAME_TABLE_HEADER
      $tablecount = unpack(&#39;n3&#39;, fread($fp, 6));
      $Found = FALSE;
      for ($i = 0; $i < $tablecount[2]; $i++) {
        //TT_NAME_RECORD
        $table = unpack(&#39;n6&#39;, 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 (
                &#39;platform&#39; => $table[1], //平台(操作系统)
    &#39;language&#39; => $table[3], //字体名称的语言
    &#39;encoding&#39; => $table[2], //字体名称的编码
    &#39;name&#39; => $fontname //字体名称
            );
            //break;
          }
          fseek($fp, $npos, SEEK_SET);
        }
      }
    }
    fclose($fp);
  }
  return $names;
}
?>
Nach dem Login kopieren

Laufendes Ergebnis:

string(6) "SimHei"
string(5) "SimHe" //貌似有UTF-16LE编码漏字的BUG
string(6) "黑体"
Nach dem Login kopieren

Hinweis: Wenn Sie nur den Namen der Schriftart benötigen, kann der obige Code wie folgt verbessert werden:

<?php
$names = GetFontName(&#39;c:/windows/fonts/FZHPJW.TTF&#39;);
$newnames = array();
foreach ($names as $name) {
  if ($name[&#39;language&#39;] == 1033)
    $code = &#39;utf-16le&#39;;
  elseif ($name[&#39;language&#39;] == 2052) $code = &#39;utf-16be&#39;;
  array_push($newnames,@mb_convert_encoding($name[&#39;name&#39;], &#39;utf-8&#39;, $code));
}
$font_name=array_pop($newnames);
echo $font_name;
function GetFontName($FilePath) {
  $fp = fopen($FilePath, &#39;r&#39;);
  if ($fp) {
    //TT_OFFSET_TABLE
    $meta = unpack(&#39;n6&#39;, 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(&#39;N4&#39;, $data = fread($fp, 16));
      if (substr($data, 0, 4) == &#39;name&#39;) {
        $Found = TRUE;
        break;
      }
    }
    if ($Found) {
      fseek($fp, $tablemeta[3]);
      //TT_NAME_TABLE_HEADER
      $tablecount = unpack(&#39;n3&#39;, fread($fp, 6));
      $Found = FALSE;
      for ($i = 0; $i < $tablecount[2]; $i++) {
        //TT_NAME_RECORD
        $table = unpack(&#39;n6&#39;, 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 (
                &#39;platform&#39; => $table[1], //平台(操作系统)
    &#39;language&#39; => $table[3], //字体名称的语言
    &#39;encoding&#39; => $table[2], //字体名称的编码
    &#39;name&#39; => $fontname //字体名称
            );
            //break;
          }
          fseek($fp, $npos, SEEK_SET);
        }
      }
    }
    fclose($fp);
  }
  return $names;
}
?>
Nach dem Login kopieren

Empfohlen: „php-Video-Tutorial“ „php-Tutorial

Das obige ist der detaillierte Inhalt vonSo erhalten Sie den Schriftartnamen einer TTF-Formatdatei in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:西部数码
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage