현재 위치: > 최신 기사 목록> imagefontwidth ()를 사용하여 이미지에서 텍스트를 렌더링 할 때 참고

imagefontwidth ()를 사용하여 이미지에서 텍스트를 렌더링 할 때 참고

M66 2025-06-04

PHP에서 ImageFontWidth ()는 내장 글꼴로 단일 문자의 너비를 가져 오는 데 사용되는 함수이며, 일반적으로 Imagestring () 또는 imagestringup () 함수에 텍스트를 그릴 때 사용됩니다. 이 기사는 ImageFontWidth () 함수를 사용할 때주의를 기울여야하는 물건과 일반적인 문제를 소개하고 개발자가 이미지에서 텍스트 레이아웃을 더 잘 제어하도록 도와줍니다.


1. 기본 사용법 소개

ImageFontWidth (int $ font) : int

  • 매개 변수 $ font 는 글꼴의 크기이고 값 범위는 1 ~ 5이며 PHP의 5 개의 내장 글꼴을 나타냅니다.

  • 반환 값은 글꼴에서 단일 문자의 너비이고 장치는 픽셀입니다.

샘플 코드 :

 <?php
$font = 3; // 글꼴 크기를 선택하십시오
$charWidth = imagefontwidth($font);
echo "Font width is: " . $charWidth;
?>

2. 주목할만한 것들

2.1 내장 글꼴에만 적용 가능

ImageFontWidth ()는 PHP (1-5)에 내장 된 5 개의 글꼴에만 사용할 수 있으며 사용자 정의 글꼴 또는 트루 타입 글꼴 ( imageTtfText ( )를 사용하여 그린 텍스트)에 사용할 수 없습니다.

ImageTtfText ()를 사용하여 텍스트를 렌더링하는 경우 imageTfbbox () 함수를 사용하여 imageFontWidth () 가 아닌 텍스트 크기를 가져와야합니다.

2.2 문자 너비가 고정되어 있습니다

내장 글꼴은 모노 스페이스 글꼴이며 각 캐릭터는 고정 너비를 가지므로 imageFontWidth ()를 사용하면 단일 문자의 고정 너비입니다. 텍스트에 다중 바이트 문자 (예 : 중국어)가 포함 된 경우 내장 글꼴이 중국어를 완전히 지원할 수 없기 때문에 단일 단어 너비가 반드시 적용되지 않을 수 있습니다.

예:

 <?php
$font = 4;
$charWidth = imagefontwidth($font);
$text = "Hello";
$textWidth = strlen($text) * $charWidth;
echo "Text width is: " . $textWidth;
?>

중국어의 경우 내장 글꼴이 다중 바이트 중국어를 지원하지 않기 때문에 strlen () 로 길이를 계산하는 데 오류가 발생하며 mb_strlen ()을 사용해야합니다.

2.3 문자열 길이를 계산할 때 인코딩에주의하십시오

텍스트가 중국어 또는 다른 멀티 바이트 문자 인 경우 strlen ()을 사용하면 문자 대신 바이트 수를 계산하여 계산 너비 오류가 발생합니다.

예를 들어 mb_strlen ()을 사용하는 것이 좋습니다.

 <?php
$text = "중국 테스트";
$font = 3;
$charWidth = imagefontwidth($font);
$textWidth = mb_strlen($text, 'UTF-8') * $charWidth;
echo "Text width is: " . $textWidth;
?>

그러나 내장 글꼴이 중국어를 올바르게 표시 할 수 없으므로 imagetftext ()를 사용하는 것이 좋습니다.

2.4 글꼴 크기 제한

ImageFontWidth () 는 글꼴 크기 1 ~ 5를 지원합니다. 범위를 벗어난 범위에서 오류 또는 부정확 한 결과를 반환합니다.


3. 자주 묻는 질문과 해결책

3.1 중국 디스플레이 예외

내장 글꼴은 중국어를 렌더링 할 수 없으며, imagestring ()을 호출 할 때 중국어가 차량 또는 공백으로 표시됩니다. 해결책:

  • imageTtfText () 함수를 사용하여 중국어를 지원하는 TTF 글꼴을로드하십시오.

  • imagetfbbox () 를 사용하여 텍스트 경계 크기를 얻고 너비와 높이를 계산하십시오.

예:

 <?php
$im = imagecreatetruecolor(200, 50);
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 200, 50, $white);

$fontfile = 'm66.net/fonts/simhei.ttf'; // 여기의 예는 다음과 같습니다 m66.net 도메인 이름 교체
$text = "중국 테스트";
$fontsize = 20;
$bbox = imagettfbbox($fontsize, 0, $fontfile, $text);
$textWidth = $bbox[2] - $bbox[0];

imagettftext($im, $fontsize, 0, 10, 30, $black, $fontfile, $text);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>

3.2 문자열 너비를 계산할 때 오류

ImageFontWidth ()를 사용하여 폭을 계산할 때 글꼴 간격 또는 특수 문자 너비는 무시되어 텍스트를 렌더링 할 때 편차가 발생합니다. 이 시점에서 시도 할 수 있습니다.

  • 너비를 사전 계산하여 적절한 마진을 남깁니다.

  • 보다 정확한 측정 방법 (예 : TTF 글꼴의 경우 imagetfbbox () )를 사용하십시오.


4. 요약

문제 설명
내장 글꼴 만 지원됩니다 사용자 정의 글꼴 또는 TTF 글꼴에는 사용할 수 없습니다
고정 문자 너비 모노 스페이스 글꼴에 적합하며 멀티 바이트 문자 너비를 정확하게 계산할 수 없습니다.
중국 지원 제한 내장 글꼴은 중국어를 지원하지 않으므로 imagetftext ()를 사용하는 것이 좋습니다.
길이 계산을 위해 인코딩에주의하십시오 중국어는 mb_strlen ()을 사용해야합니다.

일반적으로 ImageFontWidth () 는 간단한 영어 텍스트의 너비 계산을 빠르게 처리하는 데 적합한 간단한 기능이지만 중국어 또는 복잡한 글꼴 요구 사항의 경우보다 강력한 Truetype 글꼴 처리 기능을 사용하는 것이 좋습니다.