PHP의 이미지 처리 기능에서 imagefttext () 는 매우 강력한 도구입니다. 이를 통해 개발자는 사용자 정의 글꼴을 사용하여 이미지에 텍스트를 렌더링 할 수 있습니다. 이는 검증 코드 생성, 이미지 워터 마크 및 동적 그래픽 생성과 같은 응용 프로그램 시나리오에서 특히 중요합니다. 그러나 많은 개발자가 imageftText ()를 사용할 때 글꼴 호환성 관련 문제를 겪게됩니다.
이 기사는 이러한 문제에 대한 포괄적 인 설명을 제공하고 실용적인 솔루션을 제공 할 것입니다.
ImageFtText () 는 본질적으로 프리 타입 라이브러리에 대한 PHP 캡슐화 인터페이스입니다. 프리 타입은 널리 사용되는 글꼴 엔진이므로 imageftText () 에서 지원하는 글꼴 형식은 주로 프리 타입에서 지원되는 형식에 따라 다릅니다.
현재 일반적이고 안정적인 지원 글꼴 형식은 다음과 같습니다.
.ttf (Truetype 글꼴)
.otf (OpenType 글꼴)
.TTC (Truetype Collection) (일부 시스템 지원)
.pfa / .pfb (유형 1 글꼴)
그 중 .ttf 와 .otf 는 가장 일반적이고 가장 권장되는 형식입니다.
질문 설명 :
$image = imagecreatetruecolor(400, 100);
$white = imagecolorallocate($image, 255, 255, 255);
$fontPath = '/path/to/fonts/myfont.ttf';
imagefttext($image, 20, 0, 10, 40, $white, $fontPath, 'Hello, world!');
글꼴 파일이 손상되거나 호환되지 않거나 경로가 잘못된 경우 PHP가 오류를보고하거나 실패를보고합니다.
해결책:
글꼴 파일이 존재하고 적절한 파일 권한이 있는지 확인하십시오.
확인 된 .ttf 또는 .otf 글꼴 파일을 사용하십시오.
https://gitbox.net/fonts/ 와 같은 글꼴 호환성을 업로드하고 테스트 할 수 있습니다.
문제 설명 : 글꼴은 정상이지만 중국어, 한국, 일본어 및 기타 단어와 같은 영어가 아닌 캐릭터는 올바르게 표시 될 수 없습니다.
해결책:
대상 문자 세트 (예 : Noto Sans CJK , Simhei.ttf , Microsoft Yahei.ttf 등)를 지원하는 글꼴을 사용하십시오.
PHP 파일 자체가 UTF-8을 사용하여 인코딩되어 있는지 확인하십시오.
다음과 같이 설정할 수 있습니다.
$text = '안녕하세요,세계!';
$text = mb_convert_encoding($text, 'UTF-8', 'auto');
imagefttext($image, 20, 0, 10, 50, $white, $fontPath, $text);
해결책:
글꼴 파일 경로는 절대 경로 여야하며 상대 경로 나 URL 주소를 사용할 수 없습니다. 예를 들어 서버의 고정 디렉토리에 글꼴 파일을 배치하는 것이 좋습니다.
$fontPath = __DIR__ . '/fonts/arial.ttf';
원격 주소에서 글꼴을 사용하려면 먼저 file_get_contents 및 file_put_contents를 사용하여 로컬 영역으로 다운로드하여 저장할 수 있습니다.
$remoteFont = 'https://gitbox.net/fonts/myfont.ttf';
$localFont = '/tmp/myfont.ttf';
file_put_contents($localFont, file_get_contents($remoteFont));
해결책:
imageCreate () 대신 imageCreatetRueColor ()를 사용하십시오.
글꼴 크기는 12pt 이상을 권장합니다.
출력이 PNG 또는 Webp 인 경우 추가 압축 또는 스케일링이 수행되지 않도록하십시오.
.ttf 또는 .oTf 는 일부 글꼴이 반드시 모든 문자를 지원하지는 않습니다. 다음 테스트를 사용하는 것이 좋습니다.
function testFontSupport($fontPath, $char = '너') {
$img = imagecreatetruecolor(100, 50);
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $white);
imagefttext($img, 20, 0, 10, 30, $black, $fontPath, $char);
header('Content-Type: image/png');
imagepng($img);
imagedestroy($img);
}
브라우저로 결과 이미지를 빠르게 확인할 수 있습니다.
질문 유형 | 권장 솔루션 |
---|---|
글꼴은 인식되지 않습니다 | .ttf / .otf 파일을 사용하여 경로가 올바른지 확인하십시오. |
배달되거나 표시되지 않습니다 | 다국어 글꼴을 사용하십시오 |
네트워크 글꼴 로딩 | 로컬에서 사용하려면 글꼴을 다운로드하십시오 |
열악한 디스플레이 효과 | imageCreatetRueColor ()를 사용하여 캔버스 생성 |
마지막으로, 개발자는 ImageFtText ()를 사용할 때 항상 오류 처리 메커니즘과 협력하여 글꼴 파일을 미리로드하여 프로그램의 안정적인 작동을 보장하는 것이 좋습니다.
일반적인 글꼴 샘플이 필요한 경우 https://gitbox.net/fonts/를 방문하여 일반적으로 사용되는 무료 글꼴 자원을보고 다운로드 할 수 있습니다.