텍스트 도면은 PHP 이미지 처리 확장 GD 라이브러리에서 일반적인 요구 사항입니다. 일반적으로 우리는 imagestring () 또는 imagetftext () 를 사용하여 텍스트를 그립니다. 그러나 이러한 기능은 정렬 및 레이아웃이 더 간단하며 유연성이 제한적입니다. 픽셀 레벨, 특히 사용자 정의 정렬에서 텍스트 위치를 정확하게 제어하려면 ImageFontWidth () 및 ImagesEtpixel ()을 결합하여 더 미세한 텍스트 그리기 및 타이포그래피를 달성 할 수 있습니다.
이 기사는이 두 기능의 역할과 텍스트 도면의 수동 정렬을 달성하기 위해이를 사용하는 방법을 소개합니다.
ImageFontWidth () 함수는 지정된 내장 글꼴로 문자의 너비 (단위 : 픽셀)를 얻는 데 사용됩니다. GD 라이브러리에는 여러 내장 글꼴 (1 ~ 5)이 있으며 각 글꼴의 문자 너비와 높이는 고정되어 있습니다.
int imagefontwidth(int $font);
매개 변수 $ font : 글꼴 크기, 범위 1 ~ 5.
반환 값 : 글꼴의 단일 문자의 너비 (픽셀).
예를 들어:
$font = 3;
$charWidth = imagefontwidth($font);
echo "글꼴 너비는입니다 $charWidth 픽셀";
이 너비를 사용하면 텍스트 줄을 그리는 데 필요한 픽셀 길이를 추정 한 다음 정렬을 조정할 수 있습니다.
ImagesEtpixel () 함수는 지정된 이미지 리소스에서 단일 픽셀의 색상 값을 설정하는 데 사용됩니다.
bool imagesetpixel(resource $image, int $x, int $y, int $color);
$ 이미지 : 이미지 리소스.
$ x, $ y : 픽셀 포인트의 좌표.
$ 컬러 : 색 인덱스 또는 RGB 색상.
즉, 픽셀 작동으로 텍스트 위치를 사용자 정의하고보다 정확한 텍스트 레이아웃을 달성하기 위해 미세 조정할 수 있습니다.
일반적으로 텍스트를 그리면 글꼴 크기 및 텍스트 길이 (예 : 중앙, 왼쪽 또는 오른쪽)에 따라 전체 위치를 대략 추정 할 수 있습니다. 그러나 더 세심한 조정이 필요할 때 (예 : 개별 문자 위치, 비틀 거리며, 특수 그래픽 정렬) ImageFontWidth () 및 ImagesEtpixel ()은 편리합니다.
아이디어 예 :
imagefontwidth () 를 사용하여 글꼴 너비를 얻고 전체 텍스트 라인의 픽셀 너비를 계산하십시오.
요구 사항 (예 : 중심 정렬)을 기반으로 텍스트의 시작점의 X 좌표를 계산하십시오.
루프를 사용하여 문자열의 각 문자를 반복하고 하나씩 그립니다.
imagestring ()을 사용하여 먼저 문자를 그리십시오.
또는 ImagesEtpixel ()을 사용하여 위치를 조정하기 위해 추가 픽셀을 추가하는 등 문자를 미세 조정하십시오.
단일 픽셀을 작동함으로써 상세한 변위 및 정렬 효과가 달성됩니다.
다음 예에서는 텍스트 드로잉 시작점을 수동으로 계산하고 중심 정렬을 달성하며 텍스트 시각적 효과를 향상시키기 위해 indemsetpixel () 로 텍스트 픽셀을 미세 조정하는 방법을 보여줍니다.
<?php
// a 300x100 이미지
$img = imagecreatetruecolor(300, 100);
// 배경색을 설정하십시오(하얀색)
$white = imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $white);
// 텍스트 색상을 설정하십시오(검은색)
$black = imagecolorallocate($img, 0, 0, 0);
$text = "Hello GD!";
$font = 3; // 내장 글꼴
// 단일 문자 너비와 높이를 얻으십시오
$charWidth = imagefontwidth($font);
$charHeight = imagefontheight($font);
// 텍스트 너비를 계산합니다
$textWidth = strlen($text) * $charWidth;
// 계산 레벨 중앙 시작점 X 동등 어구
$startX = (imagesx($img) - $textWidth) / 2;
$startY = (imagesy($img) - $charHeight) / 2;
// 수동 구두로 그리기,미세 조정을 구현하십시오(如错开每个字一个픽셀)
for ($i = 0; $i < strlen($text); $i++) {
$char = $text[$i];
// 각 캐릭터의 위치를 시작하십시오,증가하다 Y Axis는 오프셋을 비틀 거렸다
$x = $startX + $i * $charWidth;
$y = $startY + ($i % 2); // 이상하고 심지어 비틀 거렸다 1 픽셀
// 캐릭터를 그리십시오
imagestring($img, $font, $x, $y, $char, $black);
// 추가 미세 조정:사용 imagesetpixel() 给字符右下角加一个픽셀点,증가하다视觉效果
imagesetpixel($img, $x + $charWidth - 1, $y + $charHeight - 1, $black);
}
// 출력 이미지
header("Content-Type: image/png");
imagepng($img);
imagedestroy($img);
?>
ImageFontWidth ()는 내장 글꼴 너비를 이해하고 텍스트 길이와 위치를 계산하는 핵심 기능입니다.
보다 유연한 텍스트 시각 효과를 달성하기 위해 도면이 완성 된 후 ImagesEtpixel ()을 미세 조정하거나 장식 할 수 있습니다.
두 가지를 결합하여 텍스트 레이아웃은 문자 별 그림 그리기 및 픽셀 별 작동을 통해 정확하게 제어하여 맞춤형 요구 사항을 충족시킬 수 있습니다.
이 기술은 엄격한 정렬 요구 사항과 복잡한 조판이있는 이미지 텍스트 렌더링 장면에 특히 적합합니다.