현재 위치: > 최신 기사 목록> 대안 : ImageFontWidth 함수를 imageTtfbbox ()로 바꾸는 방법보다 정확한 텍스트 너비를 얻는 방법은 무엇입니까?

대안 : ImageFontWidth 함수를 imageTtfbbox ()로 바꾸는 방법보다 정확한 텍스트 너비를 얻는 방법은 무엇입니까?

M66 2025-06-11

PHP에서 이미지 텍스트를 처리 할 때는 종종 쉬운 레이아웃 및 위치를 위해 텍스트의 너비를 얻어야합니다. 전통적으로 많은 개발자들은 ImageFontWidth () 함수를 사용하여 내장 글꼴의 문자 너비를 얻습니다. 그러나 ImageFontWidth () 는 내장 글꼴 (및 고정 크기) 만 처리 할 수 ​​있으므로 특히 Truetype 글꼴을 사용할 때 정확도와 유연성이 제한됩니다.

이 기사는 ImageFontWidth ()를 ImageTtfbbox () 함수로 바꾸는 방법을 소개하여보다 정확한 텍스트 너비 측정을 달성하는 방법을 소개합니다. 특히 TTF 글꼴이 자유롭게 사용되는 시나리오에 적합합니다.


1. ImageFontWidth () 의 제한

ImageFontWidth () 함수는 내장 글꼴 (1 ~ 5)의 크기 만 허용하고 지정된 글꼴 (픽셀)에서 문자의 너비를 반환합니다. 그러나이 기능은 문자열의 전체 너비를 측정 할 수 없으며 사용자 정의 글꼴 크기 및 글꼴 파일을 지원할 수 없습니다.

 <?php
// 전통적인 사용법,내장 글꼴 크기를 가져옵니다3캐릭터의 너비
$charWidth = imagefontwidth(3);
echo "문자 너비: $charWidth";
?>

이 메소드는 문자열이나 사용자 정의 글꼴의 너비를 정확하게 얻지 못합니다.


2. imagetfbbox ()를 사용하여보다 정확한 텍스트 너비를 얻으십시오

ImagetTfbbox () 는 Truetype 글꼴 용 PHP에서 제공하는 함수입니다. 이미지에서 주어진 텍스트의 경계 박스 좌표를 나타내는 배열을 반환합니다. 이러한 좌표를 계산하면 텍스트의 너비와 높이가 얻을 수 있습니다.

기능 프로토 타입 :

 array imagettfbbox(float $size, float $angle, string $fontfile, string $text)
  • $ 크기 : 글꼴 크기

  • $ 각도 : 각도 (보통 0)

  • $ fontfile : font 파일 경로 (.ttf)

  • $ 텍스트 : 측정 해야하는 텍스트

반품 값 :

텍스트 경계 박스의 4 개의 정점을 나타내는 8 개의 정수 배열을 반환합니다.

 0 => lower left X
1 => lower left Y
2 => lower right X
3 => lower right Y
4 => upper right X
5 => upper right Y
6 => upper left X
7 => upper left Y

3. 텍스트 너비 계산을위한 샘플 코드

다음 예제는 ImageFontWidth () 대신 imageTtfbbox ()를 사용하여 텍스트 너비를 정확하게 측정하는 방법을 보여줍니다.

 <?php
// 캐릭터 내용
$text = "Hello, 세계!";

// 글꼴 크기
$fontSize = 16;

// 각도
$angle = 0;

// 글꼴 파일 경로(글꼴 파일이 서버에 있다고 가정합니다.)
$fontFile = 'm66.net/fonts/arial.ttf';

// 텍스트 경계 박스 배열을 가져옵니다
$bbox = imagettfbbox($fontSize, $angle, $fontFile, $text);

// 너비를 계산하십시오
// 하단 오른쪽 코너X - 아래쪽 왼쪽 모서리X
$textWidth = abs($bbox[2] - $bbox[0]);

echo "텍스트 너비는입니다: " . $textWidth . " 픽셀";
?>

4. 텍스트 너비를 기반으로 동적 중심 디스플레이 예제

너비가 300px의 캔버스에서 텍스트를 그려야한다고 가정하면 먼저 imageTtfbbox ()를 사용하여 텍스트 너비를 얻은 다음 시작점을 계산할 수 있습니다.

 <?php
// 캔버스를 만듭니다
$imgWidth = 300;
$imgHeight = 50;
$image = imagecreatetruecolor($imgWidth, $imgHeight);

// 색상 정의
$bgColor = imagecolorallocate($image, 255, 255, 255);
$textColor = imagecolorallocate($image, 0, 0, 0);

// 배경을 채우십시오
imagefill($image, 0, 0, $bgColor);

// 텍스트 및 글꼴 매개 변수
$text = "Hello, 세계!";
$fontSize = 20;
$angle = 0;
$fontFile = 'm66.net/fonts/arial.ttf';

// 텍스트 너비를 얻으십시오
$bbox = imagettfbbox($fontSize, $angle, $fontFile, $text);
$textWidth = abs($bbox[2] - $bbox[0]);
$textHeight = abs($bbox[5] - $bbox[1]);

// 믿다X샤프트의 출발점,중심 수준을 달성하십시오
$x = ($imgWidth - $textWidth) / 2;

// 믿다Y샤프트의 출발점,수직 센터링을 실현하십시오(알아채다 imagettftext 기준선을 기반으로합니다)
$y = ($imgHeight + $textHeight) / 2;

// 텍스트를 그립니다
imagettftext($image, $fontSize, $angle, $x, $y, $textColor, $fontFile, $text);

// 출력 사진
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>

5. 요약

  • ImageFontWidth () 는 내장 글꼴에만 적합하며 간단한 기능이 있습니다.

  • imagettfbbox ()는 모든 TTF 글꼴의 텍스트 경계 크기를 정확하게 얻고 텍스트 너비를보다 정확하게 측정 할 수 있습니다.

  • imagetfbbox ()를 사용하면보다 유연한 텍스트 포지셔닝 및 타이포그래피 요구 사항을 얻을 수 있으며 특히 사용자 정의 글꼴 및 복잡한 텍스트에 적합합니다.

이 기사에 소개 된 예제를 통해 ImageTfbbox ()ImageTetfbbox ()를 쉽게 교체하여 이미지 워드 프로세싱의 정확성과 유연성을 향상시킬 수 있습니다.