文章主要介紹了PHP圖像處理技術,結合實例形式總結分析了php繪圖、水印、驗證碼、圖像壓縮等相關函數、功能與圖形繪制實現技巧,需要的朋友可以參考下:
1、繪圖
場景: 驗證碼、圖像水印、圖像壓縮處理
php繪圖坐標體系是從0,0點越向右值越大,越向下值越大
需要開啟php的gd2擴展 php.ini 中
參數1:圖像資源(畫布)
參數2:開始的x軸坐標
參數3:開始的y軸坐標
參數4:結束的x軸坐標
參數5:結束的y軸坐標
參數6:線條的顏色
(1)繪制線條:imageline($p1, $p2, $p3, $p4, $p5, $6)
(2)繪制三角形:imageline($p1, $p2, $p3, $p4, $p5, $6)// 需要3次
(3)繪制矩形:imagerectangle($p1, $p2, $p3, $p4, $p5, $6)
(3.1)繪制并填充矩形:imagefilledrectangle($p1, $p2, $p3, $p4, $p5, $6)
(4)繪制橢圓:imageellipse($p1, $p2, $p3, $p4, $p5, $6)
(4.1)繪制并填充橢圓:imagefilledellipse($p1, $p2, $p3, $p4, $p5, $6)
參數1:目標圖像
參數2:原始圖像
參數3:目標圖像坐標x
參數4:目標圖像坐標y
參數5:原始圖像開始坐標x
參數6:原始圖像開始坐標y
參數7:原始圖像寬度
參數8:原始圖像高度
(5)將圖片繪制到畫布上:imagecopy ( $p1, $p2, $p3, $p4, $p5, $6, $7, $8)
參數1:目標圖像
參數2:字體 1,2,3,4 或 5,則使用內置字體
參數3:目標圖像坐標x
參數4:目標圖像坐標y
參數5:字符,文字
參數6:顏色
(6)繪制字符串:imagestring( $p1, $p2, $p3, $p4, $p5, $6)// 向畫布寫入字符,文字
參數1:圖像資源
參數2:字體大小
參數3:傾斜角度
參數4:x軸坐標
參數5:y軸坐標
參數6:字體顏色
參數7:字體文件
參數8:文字
(7)繪制中文:imagettftext($p1, $p2, $p3, $p4, $p5, $6, $7, $8)
參數1:圖像資源
參數2:弧形開始x坐標
參數3:弧形開始y坐標
參數4:弧形寬度
參數5:弧形高度
參數6:弧形開始角度
參數7:弧形結束角度
參數8:繪圖顏色
(8)繪制弧形:imagearc($p1, $p2, $p3, $p4, $p5, $6, $7, $8)// 三點鐘的位置是起點(0度), 順時針方向繪畫
實例 - 弧形?
// 創建一個 200X200 的圖像$img= imagecreatetruecolor(200, 200);// 分配顏色$white= imagecolorallocate($img, 255, 255, 255);$black= imagecolorallocate($img, 0, 0, 0);// 畫一個黑色的圓imagearc($img, 100, 100, 150, 150, 0, 360,$black);// 將圖像輸出到瀏覽器header("Content-type: image/png");imagepng($img);// 釋放內存imagedestroy($img);
參數1:圖像資源
參數2:弧形開始x坐標
參數3:弧形開始y坐標
參數4:弧形寬度
參數5:弧形高度
參數6:弧形開始角度
參數7:弧形結束角度
參數8:繪圖顏色
參數9:填充樣式
- IMG_ARC_PIE: 用直線連接產生圓形邊界
- IMG_ARC_CHORD: 用直線連接了起始和結束點
- IMG_ARC_NOFILL: 明弧或弦只有輪廓,不填充
- IMG_ARC_EDGED:用直線將起始和結束點與中心點相連,和 IMG_ARC_NOFILL 一起使用是畫餅狀圖輪廓的好方法(而不用填充)
(9)繪制弧形并填充:imagefilledarc($p1, $p2, $p3, $p4, $p5, $6, $7, $8, $9)// 三點鐘的位置是起點(0度), 順時針方向繪畫
實例 - 弧形填充?
// 創建圖像$image= imagecreatetruecolor(100, 100);// 分配一些顏色$white= imagecolorallocate($image, 0xFF, 0xFF, 0xFF);$gray= imagecolorallocate($image, 0xC0, 0xC0, 0xC0);$darkgray= imagecolorallocate($image, 0x90, 0x90, 0x90);$navy= imagecolorallocate($image, 0x00, 0x00, 0x80);$darknavy= imagecolorallocate($image, 0x00, 0x00, 0x50);$red= imagecolorallocate($image, 0xFF, 0x00, 0x00);$darkred= imagecolorallocate($image, 0x90, 0x00, 0x00);// 創建 3D 效果for($i= 60;$i> 50;$i--) {imagefilledarc($image, 50,$i, 100, 50, 0, 45,$darknavy, IMG_ARC_PIE);imagefilledarc($image, 50,$i, 100, 50, 45, 75 ,$darkgray, IMG_ARC_PIE);imagefilledarc($image, 50,$i, 100, 50, 75, 360 ,$darkred, IMG_ARC_PIE);}imagefilledarc($image, 50, 50, 100, 50, 0, 45,$navy, IMG_ARC_PIE);imagefilledarc($image, 50, 50, 100, 50, 45, 75 ,$gray, IMG_ARC_PIE);imagefilledarc($image, 50, 50, 100, 50, 75, 360 ,$red, IMG_ARC_PIE);// 輸出圖像header('Content-type: image/png');imagepng($image);imagedestroy($image);
效果

2、水印
使用imagestring()或者imagettftext()
實例 - 圖片加字?
// 建立一幅 100X30 的圖像$im= imagecreate(100, 30);// 白色背景和藍色文本$bg= imagecolorallocate($im, 255, 255, 255);$textcolor= imagecolorallocate($im, 0, 0, 255);// 把字符串寫在圖像左上角imagestring($im, 5, 0, 0,"Hello world!",$textcolor);// 輸出圖像header("Content-type: image/png");imagepng($im);














