현재 위치: > 최신 기사 목록> 텍스트 그리기를 imagesetpixel ()로 수동으로 정렬합니다.

텍스트 그리기를 imagesetpixel ()로 수동으로 정렬합니다.

M66 2025-06-05

텍스트 도면은 PHP 이미지 처리 확장 GD 라이브러리에서 일반적인 요구 사항입니다. 일반적으로 우리는 imagestring () 또는 imagetftext () 를 사용하여 텍스트를 그립니다. 그러나 이러한 기능은 정렬 및 레이아웃이 더 간단하며 유연성이 제한적입니다. 픽셀 레벨, 특히 사용자 정의 정렬에서 텍스트 위치를 정확하게 제어하려면 ImageFontWidth ()ImagesEtpixel ()을 결합하여 더 미세한 텍스트 그리기 및 타이포그래피를 달성 할 수 있습니다.

이 기사는이 두 기능의 역할과 텍스트 도면의 수동 정렬을 달성하기 위해이를 사용하는 방법을 소개합니다.


1. ImageFontWidth () 이해

ImageFontWidth () 함수는 지정된 내장 글꼴로 문자의 너비 (단위 : 픽셀)를 얻는 데 사용됩니다. GD 라이브러리에는 여러 내장 글꼴 (1 ~ 5)이 있으며 각 글꼴의 문자 너비와 높이는 고정되어 있습니다.

 int imagefontwidth(int $font);
  • 매개 변수 $ font : 글꼴 크기, 범위 1 ~ 5.

  • 반환 값 : 글꼴의 단일 문자의 너비 (픽셀).

예를 들어:

 $font = 3;
$charWidth = imagefontwidth($font);
echo "글꼴 너비는입니다 $charWidth 픽셀";

이 너비를 사용하면 텍스트 줄을 그리는 데 필요한 픽셀 길이를 추정 한 다음 정렬을 조정할 수 있습니다.


2. ImagesEtpixel 이해 ()

ImagesEtpixel () 함수는 지정된 이미지 리소스에서 단일 픽셀의 색상 값을 설정하는 데 사용됩니다.

 bool imagesetpixel(resource $image, int $x, int $y, int $color);
  • $ 이미지 : 이미지 리소스.

  • $ x, $ y : 픽셀 포인트의 좌표.

  • $ 컬러 : 색 인덱스 또는 RGB 색상.

즉, 픽셀 작동으로 텍스트 위치를 사용자 정의하고보다 정확한 텍스트 레이아웃을 달성하기 위해 미세 조정할 수 있습니다.


3. 구현 아이디어 :이 둘을 결합하여 수동 정렬을 달성합니다.

일반적으로 텍스트를 그리면 글꼴 크기 및 텍스트 길이 (예 : 중앙, 왼쪽 또는 오른쪽)에 따라 전체 위치를 대략 추정 할 수 있습니다. 그러나 더 세심한 조정이 필요할 때 (예 : 개별 문자 위치, 비틀 거리며, 특수 그래픽 정렬) ImageFontWidth ()ImagesEtpixel ()은 편리합니다.

아이디어 예 :

  1. imagefontwidth () 를 사용하여 글꼴 너비를 얻고 전체 텍스트 라인의 픽셀 너비를 계산하십시오.

  2. 요구 사항 (예 : 중심 정렬)을 기반으로 텍스트의 시작점의 X 좌표를 계산하십시오.

  3. 루프를 사용하여 문자열의 각 문자를 반복하고 하나씩 그립니다.

    • imagestring ()을 사용하여 먼저 문자를 그리십시오.

    • 또는 ImagesEtpixel ()을 사용하여 위치를 조정하기 위해 추가 픽셀을 추가하는 등 문자를 미세 조정하십시오.

  4. 단일 픽셀을 작동함으로써 상세한 변위 및 정렬 효과가 달성됩니다.


4. 샘플 코드

다음 예에서는 텍스트 드로잉 시작점을 수동으로 계산하고 중심 정렬을 달성하며 텍스트 시각적 효과를 향상시키기 위해 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);
?>

5. 요약

  • ImageFontWidth ()는 내장 글꼴 너비를 이해하고 텍스트 길이와 위치를 계산하는 핵심 기능입니다.

  • 보다 유연한 텍스트 시각 효과를 달성하기 위해 도면이 완성 된 후 ImagesEtpixel ()을 미세 조정하거나 장식 할 수 있습니다.

  • 두 가지를 결합하여 텍스트 레이아웃은 문자 별 그림 그리기 및 픽셀 별 작동을 통해 정확하게 제어하여 맞춤형 요구 사항을 충족시킬 수 있습니다.

  • 이 기술은 엄격한 정렬 요구 사항과 복잡한 조판이있는 이미지 텍스트 렌더링 장면에 특히 적합합니다.