2010-05-21 4 views
8

사용자가 선택한 TTF 글꼴을 사용하여 PHP GD 확장자를 사용하여 문자를 렌더링하는 웹 서비스를 개발 중입니다.PHP-GD : 유니 코드 문자 다루기

이 ASCII-땅에서 잘 작동하지만 몇 가지 문제가 있습니다 :

  1. 렌더링 할 문자열은 UTF-8로 제공가. 일부 글꼴은 ASCII 문자, ISO 8601 등에 대한 문자 모양 만 있기 때문에 문자열을 올바르게 렌더링 할 수있는 글꼴로 사용자 선택 가능 글꼴 목록을 제한하고 싶습니다.

  2. 일부 장식 문자 가 포함되어 있다면, 선택한 글꼴에서 대부분의 문자를 렌더링하고 Arial (또는 확장 된 글리프가 포함 된 글꼴)의 장식 문자를 렌더링하는 것이 좋습니다.

PHP-GD는 주어진 글꼴로 문자를 렌더링 할 수 있는지 알아보기 위해 글꼴 메타 데이터를 충분히 쿼리하는 것처럼 보이지 않습니다. 글꼴 메트릭을 PHP로 가져 오는 좋은 방법은 무엇입니까? XML 또는 다른 구문 분석 가능한 형식으로 덤프 할 수있는 명령 줄 유틸리티가 있습니까?

+0

그냥 자신 유니 코드 글꼴 얻을 :

예 같은 디렉토리에 트루 타입 글꼴의 세트에서 .ttx 파일을 생성 GNU 메이크

. –

답변

0

TTX 유틸리티를 사용하여 글꼴 메트릭을 덤프했습니다. 그런 다음 결과 .ttx 파일을 검사하고 문자 -> 글리프 맵을 살펴볼 수 있습니다. 이 작업은 수동으로 수행했지만 XML 파일을 자동으로 구문 분석 할 수 있습니다.

all: fontmetrics 

fontmetrics: $(patsubst %.ttf,%.ttx,$(wildcard *.ttf)) 
.PHONY: fontmetrics 

clean: 
    rm -f *.ttx 

%.ttx: %.ttf 
    ttx -t cmap $< 
2

PHP-Cairo Pango에 대해 작성되었으며 fontconfig는 적절한 경우 글꼴을 바꾸기에 충분한 두뇌를 가져야합니다.

1

것은, 당신이 http://php.net/manual/en/function.utf8-decode.php

에서 촬영

<?php 
$trans = new Latin1UTF8(); 

$mixed = "MIXED TEXT INPUT"; 

print "Original: ".$mixed; 
print "Latin1: ".$trans->mixed_to_latin1($mixed); 
print "UTF-8: ".$trans->mixed_to_utf8($mixed); 

class Latin1UTF8 { 

    private $latin1_to_utf8; 
    private $utf8_to_latin1; 
    public function __construct() { 
     for($i=32; $i<=255; $i++) { 
      $this->latin1_to_utf8[chr($i)] = utf8_encode(chr($i)); 
      $this->utf8_to_latin1[utf8_encode(chr($i))] = chr($i); 
     } 
    } 

    public function mixed_to_latin1($text) { 
     foreach($this->utf8_to_latin1 as $key => $val) { 
      $text = str_replace($key, $val, $text); 
     } 
     return $text; 
    } 

    public function mixed_to_utf8($text) { 
     return utf8_encode($this->mixed_to_latin1($text)); 
    } 
} 
?> 

같은 것을 시도해야 혼합 및 UTF-8 문자의 경우 당신이 그것을 사용할 수 있다면 평등합니다. 그렇지 않다면 그럴 수 없습니다.