2009-09-01 8 views
2

업데이트 : TTF 파일이 테스트 후 표시됩니다. 업데이트 : 글꼴 파일의 상대 경로로 변경되었습니다. 아직도 작동하지 않습니다.PHP GD에서 오류가 발생했습니다

PHP를 통해 GD를 사용하여 이미지를 만들 때 다음 오류가 발생합니다.

[9월 1일 19시 44분 15초 화 2009] [오류] [클라이언트가 IP 주소] PHP 경고 : imagettftext()가 [function.imagettftext] : 에 은 찾을 수 없습니다 개방/글꼴 라인 38

에 /www/vhosts/website.com/htdocs/trial/TextToImage.class.php 나는 그것이 나에게 같은 오류가 제공되었을 때 글꼴의 경로를 변경했습니다. 파일을 폴더에 놓아 서버에 글꼴을 추가했습니다. 내가 뭘 놓치고 있니?

/** 
* @name     : makeImageF 
* 
* Function for create image from text with selected font. 
* 
* @param String $text  : String to convert into the Image. 
* @param String $font  : Font name of the text. 
* @param int $W  : Width of the Image. 
* @param int $H  : Hight of the Image. 
* @param int  $X  : x-coordinate of the text into the image. 
* @param int $Y  : y-coordinate of the text into the image. 
* @param int $fsize : Font size of text. 
* @param array $color  : RGB color array for text color. 
* @param array $bgcolor : RGB color array for background. 
* 
*/ 
public function makeImageF($text, $font="/www/vhosts/website.com/htdocs/trial/CENTURY.TTF", $W=200, $H=20, $X=0, $Y=0, $fsize=18, $color=array(0x0,0x0,0x0), $bgcolor=array(0xFF,0xFF,0xFF)){ 

    $this->im = @imagecreate($W, $H) 
     or die("Cannot Initialize new GD image stream"); 

    $background_color = imagecolorallocate($this->im, $bgcolor[0], $bgcolor[1], $bgcolor[2]);  //RGB color background. 
    $text_color = imagecolorallocate($this->im, $color[0], $color[1], $color[2]);   //RGB color text. 

    imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font, $text); 
} 
+0

클래스/색인 파일을 사용하여 글꼴을 배치하고 디버깅하기 위해 상대 경로를 통해 사용해 보았습니까? –

답변

3

아마도 libgd 버전에서 알 수없는 형식의 글꼴 파일 일 것입니다.
phpinfo()의 출력의 gd 섹션에는 FreeType/T1Lib 라이브러리의 버전이 포함되어야합니다. 어떤거야?
그리고

echo '<pre>Debug: '; passthru('file '.$font); echo "</pre>\n"; 
// imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font, $text); 

인쇄 무엇?

편집 : 글꼴 파일의 유형을 잊어 버리십시오. 오류는 Could not read font입니다. Could not find/open font은 실제로 그 내용을 의미합니다 : 그러한 파일이 없거나 액세스 할 수 없습니다.
passthru('file '.$font);의 출력은 "전용"CENTURY.TTF: TrueType font data입니까? 그런 다음 상대 경로를 사용했습니다.

$font_realpath = realpath($font); 
if (!$font_realpath || !is_file($font_realpath)) { 
    die 'no such font file'; 
} 
else if (!is_readable($font_realpath)) { 
    die 'cannot read font file'; 
} 
imagettftext($this->im, $fsize, $X, $Y, $fsize, $text_color, $font_realpath, $text); 
+0

다음은 phpinfo 파일의 GD 부분의 모든 것입니다. 따라서 Freetype은 2.2.1입니다. phpinfo 페이지에는 t1lib가 전혀 없습니다. GD 지원 \t이 GD 버전 \t가 번들로 사용할 수 (2.0.28 호환) FreeType에서이 지원 \t이 \t 2.2.1 GIF 읽기 지원 \t이 GIF가 지원 \t 만들기 활성화 FreeType에서 FreeType에서 버전으로 FreeType에서 연계 \t을 활성화 JPG 지원 가능 \t는 PNG 지원 \t 이 WBMP 지원 \t이 은 XBM가 지원 \t가 ' – Joe

+0

가 좋아, 지금하자 사용 사용 사용 사용 글꼴 파일의 유형을 확인하십시오. – VolkerK

+0

디버그 : CENTURY.TTF : 트루 타입 글꼴 데이터 작업을 시작하기 위해 나머지 img.php 파일을 주석 처리해야했습니다. 그게 중요하다면. – Joe

1

그것은 당신이 함수를 호출하는 방법이 될 수 있습니다 - 기능이 추가하면, 당신은

if (!file_exists($font)) 
    die("Font not found ($font)"); 
if (!is_readable($font)) 
    die("Font exists but not readable ($font)"); 

는 또한 글꼴 경로가 절대이며 슬래시로 시작하지 않는 확인하는 데 도움 fontFile에 선도적 인/다음 01로 시작하지 않는 경우 GD 라이브러리 PHP 버전에 사용되어 따라 imagettftext 상태

에 대한 매뉴얼 페이지.ttf가 파일 이름 에 추가되고 라이브러리는 라이브러리 정의 글꼴 경로를 따라 해당 파일 이름에 대해 을 검색하려고 시도합니다.

+0

+1 제거 과정. –

+0

이것을 시도하면 두 가지 모두를 통과합니다. 오류가 표시되지 않습니다. – Joe

0

웹 서버 (웹 서버를 실행하는 사용자)가 해당 폴더/파일에 대한 읽기 액세스 권한을 갖고 있습니까?

+0

이것을 테스트 할 좋은 방법이 있습니까? 글꼴 파일을 온라인에서 찾아보고 내 서버에서 다운로드 할 수 있습니다. 나는 네 대답을 할 것이라고 생각한다. – Joe

+0

Paul Dixon, file_exists + is_readable의 대답은 파일의 존재 여부와 가독성을 테스트해야합니다. –

관련 문제