현재 위치: > 최신 기사 목록> 텍스트 레이아웃을보다 정확하고 유연하게 만들기 위해 ImageSetpixel ()과 함께 indageFontWidth 기능으로 텍스트 그리기를 수동으로 정렬하는 방법은 무엇입니까?

텍스트 레이아웃을보다 정확하고 유연하게 만들기 위해 ImageSetpixel ()과 함께 indageFontWidth 기능으로 텍스트 그리기를 수동으로 정렬하는 방법은 무엇입니까?

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 ()을 미세 조정하거나 장식 할 수 있습니다.

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

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