PHP 이미지 처리 라이브러리 GD에서 ImageFontWidth () 함수는 지정된 내장 글꼴의 단일 문자 너비를 얻는 데 사용됩니다. 일반적인 사용법은 글꼴 번호 (1-5)를 전달한 다음 글꼴 문자의 너비 (픽셀 수)를 반환하는 것입니다. 그러나 실제 개발에서 많은 사람들이 ImageFontWidth () 에 의해 반환 된 너비가 예상 문자의 너비와 일치하지 않는 문제를 겪게됩니다. 특히 텍스트 나 레이아웃을 그릴 때 이미지가 비정상적으로 표시됩니다.
이 기사는이 기능의 작업 메커니즘, 일반적인 오해 및 일관되지 않은 폭의 문제를 디버깅하고 해결하는 방법을 이해하는 데 도움이됩니다.
<?php
// 내장 글꼴 번호를 사용하십시오1,문자 너비를 얻으십시오
$font = 1;
$width = imagefontwidth($font);
echo "Font $font character width is $width pixels.";
?>
GD 라이브러리의 내장 글꼴은 크기와 스타일의 글꼴에 해당하는 숫자 1에서 5입니다. ImageFontWidth ()는 글꼴의 모든 문자의 너비에 대한 고정 값을 반환합니다.이 글꼴은 모노 스페이스이기 때문입니다. 따라서이 너비는 글꼴의 각 문자의 표준 너비입니다.
ImageFontWidth ()는 GD의 내장 글꼴에만 사용할 수 있습니다. 다른 글꼴 자원을 통과하는 것은 유효하지 않으며 사용하는 사용자 정의 글꼴의 문자 너비를 반환하지 않습니다.
// 잘못된 사용,사용자 정의 글꼴 파일 리소스를 전달하면 부정확 한 결과가 발생할 수 있습니다.
$fontPath = '/path/to/custom/font.ttf';
$fontSize = 12;
$bbox = imagettfbbox($fontSize, 0, $fontPath, "A");
$width = imagefontwidth($fontPath); // 잘못된 사용
TTF 글꼴을 사용하는 경우 imagetfbbox () 함수를 사용하여 문자의 실제 너비를 얻습니다.
ImageFontWidth ()는 단일 문자의 너비의 고정 값을 반환하며, 특히 중국어, 특히 중국어 또는 다중 바이트 문자의 차이를 구별하는 것은 불가능합니다.
내장 글꼴 번호는 1-5 일 수 있으며 다른 숫자는 잘못된 결과를 초래할 수 있습니다.
내장 글꼴을 사용하는 경우 ImageFontWidth ()를 사용하여 반환 된 너비는 정확합니다.
<?php
$font = 3;
$width = imagefontwidth($font);
$height = imagefontheight($font);
echo "Font $font character width: $width px\n";
echo "Font $font character height: $height px\n";
?>
사용자 정의 글꼴 (TTF) 인 경우 imagetfbbox ()를 사용하여 계산해야합니다.
<?php
$text = "시험A";
$fontFile = 'm66.net/fonts/arial.ttf'; // 여기에 사용됩니다 m66.net 도메인 이름은 실제 경로를 대체합니다
$fontSize = 14;
$angle = 0;
$bbox = imagettfbbox($fontSize, $angle, $fontFile, $text);
$width = abs($bbox[2] - $bbox[0]);
$height = abs($bbox[7] - $bbox[1]);
echo "Text width: $width px\n";
echo "Text height: $height px\n";
?>
여기에서 imageTtfbbox ()는 텍스트 테두리의 4 개의 코너 지점의 좌표를 반환하고 계산을 통해 너비와 높이를 얻을 수 있습니다.
글꼴 유형 확인 : 먼저 내장 글꼴 또는 사용자 정의 글꼴을 사용하고 있는지 확인하십시오.
다른 글꼴 번호 테스트 : imageFontWidth ()를 호출 할 때 글꼴 번호가 유효한지 확인하십시오.
실제 너비를 인쇄하십시오 : ImageFontWidth () 또는 imagetfbbox ()를 결합하여 페이지 또는 명령 줄의 너비를 인쇄하여 합리적인 지 확인하십시오.
인코딩 및 문자 유형에 유의하십시오 : 다중 바이트 문자와 중국 너비는 내장 글꼴 함수를 사용하는 데 적합하지 않습니다.
이미지 디스플레이로 테스트 : 이미지에 텍스트를 그린 후 이미지를 출력하여 너비가 예상되는지 확인하십시오.
<?php
header('Content-Type: image/png');
$img = imagecreatetruecolor(300, 100);
$bgColor = imagecolorallocate($img, 255, 255, 255);
$txtColor = imagecolorallocate($img, 0, 0, 0);
imagefill($img, 0, 0, $bgColor);
$font = 3;
$text = "Hello";
$charWidth = imagefontwidth($font);
$totalWidth = $charWidth * strlen($text);
imagestring($img, $font, (300 - $totalWidth) / 2, 40, $text, $txtColor);
imagestring($img, 1, 10, 10, "Char width: $charWidth px", $txtColor);
imagepng($img);
imagedestroy($img);
?>
이 코드는 글꼴이 내장 된 문자열을 그리거나 문자 너비를 계산하는 것을 보여줍니다.
ImageFontWidth () 의 적용 범위를 이해하고 imageTtfbbox () 와 같은 함수를 결합함으로써 캐릭터 너비 계산 오류를 효과적으로 피하고 이미지 텍스트 도면의 정확도를 향상시킬 수 있습니다.