五個遞進式範例,快速掌握 GD 基礎
例 1:字符繪製與顏色分配
<?php
$im = imagecreatetruecolor(100, 100);
$white = imagecolorallocate($im, 255,255,255);
$black = imagecolorallocate($im, 0,0,0);
$red = imagecolorallocate($im, 255,0,0);
$str = 'N';
imagecharup($im, 6, 20, 20, $str, $white); // 向上繪字
imagechar($im, 2, 40, 40, 'R', $red); // 水平繪字
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
例 2:橢圓弧(圓圈)
<?php
$im = imagecreatetruecolor(400, 400);
$white = imagecolorallocate($im, 255,255,255);
$black = imagecolorallocate($im, 0,0,0);
imagearc($im, 200,200, 350,350, 0,360, $white); // 完整圓
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
例 3:三圓透明疊加(RGB 混色展示)
<?php
$size = 300;
$im = imagecreatetruecolor($size, $size);
$back = imagecolorallocate($im, 255,255,255);
$border = imagecolorallocate($im, 0,0,0);
imagefilledrectangle($im, 0,0, $size-1,$size-1, $back);
imagerectangle($im, 0,0, $size-1,$size-1, $border);
// Alpha 分配(75 = 約 70% 透明)
$yellow = imagecolorallocatealpha($im, 255,255,0, 75);
$red = imagecolorallocatealpha($im, 255,0,0, 75);
$blue = imagecolorallocatealpha($im, 0,0,255, 75);
imagefilledellipse($im, 100, 75, 150,150, $yellow);
imagefilledellipse($im, 120, 165, 150,150, $red);
imagefilledellipse($im, 187, 125, 150,150, $blue);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
例 4:左上角字串輸出
<?php
$im = imagecreate(100, 100); // 調色盤模式也可
$bg = imagecolorallocate($im, 255,255,255);
$black = imagecolorallocate($im, 0,0,0);
imagechar($im, 1, 0, 0, 'PHP', $black);
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
例 5:基礎流程總結
- 建立畫布:
imagecreatetruecolor(w,h)(推薦)或 imagecreate(w,h)
- 分配顏色:
imagecolorallocate($im, r,g,b) 或 imagecolorallocatealpha($im, r,g,b, alpha)
- 繪圖:
imagefill、imagestring、imageline、imagearc、imagefilledellipse 等
- 輸出:
header('Content-Type: image/png') → imagepng($im)
- 釋放:
imagedestroy($im)
常用繪圖函數速查
| 函數 | 用途 |
imagesetpixel($im, x, y, $c) | 畫單一像素 |
imageline($im, x1,y1, x2,y2, $c) | 畫直線 |
imagerectangle($im, x1,y1, x2,y2, $c) | 畫矩形框 |
imagefilledrectangle($im, x1,y1, x2,y2, $c) | 填滿矩形 |
imagearc($im, cx,cy, w,h, s,e, $c) | 畫橢圓弧 |
imagefilledarc($im, cx,cy, w,h, s,e, $c, IMG_ARC_PIE) | 填滿扇形 |
imageellipse($im, cx,cy, w,h, $c) | 畫橢圓框 |
imagefilledellipse($im, cx,cy, w,h, $c) | 填滿橢圓 |
imagestring($im, font, x,y, str, $c) | 內建字體畫字 |
imagettftext($im, size, angle, x,y, $c, fontfile, str) | TTF 字體畫字(支援中文) |