PHP에서는 이미지 텍스트 조판을 처리 할 때 종종 여러 줄의 텍스트 정렬 문제가 발생합니다. GD 라이브러리에서 ImageFontWidth () 함수를 사용하여 지정된 글꼴의 문자 너비를 쉽게 가져 오면보다 정확한 텍스트 레이아웃 및 정렬을 달성 할 수 있습니다. 이 기사에서는 ImageFontWidth () 함수를 사용하여 텍스트의 깔끔한 레이아웃을 지원하기 위해 여러 줄의 텍스트 라인의 너비를 자동으로 계산하는 방법을 자세히 소개합니다.
ImageFontWidth () 는 GD 라이브러리가 제공하는 함수로, 지정된 내장 글꼴로 각 문자의 너비를 픽셀로 가져옵니다. 기능 프로토 타입은 다음과 같습니다.
int imagefontwidth(int $font);
매개 변수 $ font 는 글꼴 크기이고 값 범위는 일반적으로 1 ~ 5이며 GD에 내장 된 5 개의 글꼴 크기에 해당합니다.
함수는 글꼴에서 각 문자의 너비를 반환합니다.
이 기능을 통해 텍스트의 각 문자가 차지하는 픽셀의 수를 알 수 있으므로 문자열의 길이에 따라 전체 텍스트의 너비를 계산합니다.
그림에 여러 줄의 텍스트를 그리고 각 줄의 너비를 중심 또는 왼쪽으로 정렬한다고 가정 해 봅시다. 여러 줄의 텍스트 라인은 종종 길이가 다르고 문자열의 너비를 직접 계산하여 그릴 수 있습니다. 이는 특히 단일 장애 글꼴을 사용할 때 고르지 않은 레이아웃으로 이어질 수 있습니다.
솔루션은 먼저 ImageFontWidth ()를 사용하여 단일 문자의 너비를 계산 한 다음 문자열의 길이를 기준으로 각 라인의 너비를 계산하여 텍스트의 시작점 좌표를 결정하고 자동 정렬을 달성하는 것입니다.
다음 예제 코드는 PHP의 GD 라이브러리를 사용하여 ImageFontWidth () 와 결합하여 멀티 린 텍스트의 중앙 정렬을 달성하는 방법을 보여줍니다.
<?php
// 빈 이미지를 만듭니다
$width = 400;
$height = 200;
$image = imagecreatetruecolor($width, $height);
// 배경색과 텍스트 색상을 설정합니다
$bgColor = imagecolorallocate($image, 255, 255, 255); // 흰색 배경
$textColor = imagecolorallocate($image, 0, 0, 0); // 검은 텍스트
// 배경을 채우십시오
imagefilledrectangle($image, 0, 0, $width, $height, $bgColor);
// 그릴 여러 줄의 텍스트
$textLines = [
"이것은 첫 번째 텍스트 줄입니다",
"두 번째 텍스트 줄은 조금 더 길다",
"세 번째 줄"
];
// 글꼴 크기를 선택하십시오
$font = 5; // GD내장 글꼴,1-5~ 사이
// 글꼴 너비와 높이를 계산하십시오
$fontWidth = imagefontwidth($font);
$fontHeight = imagefontheight($font);
// 초기 드로잉 시작점Y동등 어구
$startY = 20;
// 각 텍스트 라인을 반복하십시오,너비를 계산하고 중앙에 그리십시오
foreach ($textLines as $line) {
$lineLength = strlen($line); // 알아채다:여기에 사용됩니다strlen순수한 영어에 적합합니다,중국어가있는 경우 사용하십시오mb_strlen그리고 캐릭터 인코딩이 있는지 확인하십시오
$lineWidth = $fontWidth * $lineLength;
// 믿다X동등 어구,정렬 센터
$x = ($width - $lineWidth) / 2;
// 텍스트를 그립니다
imagestring($image, $font, $x, $startY, $line, $textColor);
// 다음 줄Y동등 어구
$startY += $fontHeight + 10; // 라인 간격10픽셀
}
// 출력 이미지
header("Content-Type: image/png");
imagepng($image);
imagedestroy($image);
?>
imagefontwidth () 및 strlen () 에 의해 현재 라인 텍스트 너비를 계산합니다.
이미지 너비를 사용하여 텍스트 너비를 빼고 2로 나뉘어 중앙에있을 때 x 좌표를 계산하십시오.
여러 줄의 텍스트 라인을 순서대로 그립니다. 그리고 y 좌표를 조정하여 라인 파괴 효과를 달성하십시오.
중국 문자열 너비 계산에주의하십시오. strlen () 은 바이트 수를 계산하여 계산 오류로 이어질 수 있습니다. mb_strlen () 과 적절한 문자 인코딩을 결합하는 것이 좋습니다.
ImageFontWidth ()는 단일 문자의 너비 만 얻을 수 있지만 한자는 일반적으로 멀티 바이트입니다. 정확성을 보장하기 위해 mb_strlen ()을 사용하는 것이 가장 좋습니다.
$lineLength = mb_strlen($line, 'UTF-8');
PHP 파일 및 운영 환경이 UTF-8 인코딩을 지원하는지 확인하십시오.
ImageFontWidth () 함수는 PHP GD 라이브러리에서 간단하지만 매우 실용적인 도구입니다. 개발자는 멀티 라인 텍스트 폭을 자동으로 계산하고보다 합리적인 텍스트 레이아웃 및 정렬을 달성하는 데 도움이 될 수 있습니다. 문자열 길이를 결합하여 각 텍스트 라인에서 차지하는 픽셀 폭을 계산함으로써 중심 또는 기타 정렬에 쉽게 입력 할 수 있으며 이미지 단어 처리의 복잡성을 크게 단순화합니다.