gd庫的相關內容

gd庫注意事項

對於亂碼問題

在php裏面包含php

header("content-type:image/png");

這樣輸出的圖像就不會亂碼了後面跟的Png也能夠改變爲本身想要輸出的圖像格式,在這個時候若是var_dump();那麼就會出錯誤,由於輸出的是圖片格式,須要用到var_dump()的時候註釋掉就能夠了。windows

關於圖像的畫布建立

imageCreateTrueColor(height,weidth);//建立畫布設置寬高

建立顏色對象

imageColorAllocate(img_resource,r,g,b);//設置畫布的顏色

填充畫布背景顏色

imageFill(img_resource,x,y,color);

(x,y)表示從哪裏開始填充顏色不寫的話默認是黑色的數組

出現的問題:在設置起始填充位置時若是超出畫布大小則會以默認顏色填充瀏覽器

繪製矩形

空心

imagerectangle(img_resource,x1,y1,x2,y2,color);

x1,y1左上角性能

x2,y2右下角字體

實心

imagefilledrectangle(img_resource,x1,y1,x2,y2,color);

繪製圓形

空心編碼

imageellipse(img_resource,x,y,圓形的上下長,圓形的左右長,color);

x,y表示的圓心位置code

實心對象

imagefilledellipse(img_resource,x,y,圓形的上下長,圓形的左右長,color);

繪製線條

imageline(img_resource,x1,y1,x2,y2,color)

x1,y1起始位置座標圖片

x2,y2終點位置座標

設置繪製線條的寬度

imagesetthickness(img_resource,width);//設置繪製線條的寬度

在繪製某一圖形以前設置

要繪製兩個寬度不同的線條,案例以下

imagesetthickness($im,20);
imageline($im,0,0,500,500,$blue);
imagesetthickness($im,10);
imageline($im,0,500,500,0,$blue);

這樣,兩條線就獲得了不一樣的寬度

設置填充的樣式

imagesetstyle($im,[$red,$blue,$green]);

同樣在繪製前設定上面的案例指的是填充的是三色交替的樣子,設置完以後要想看到效果,

imageline(img_resource,x1,y1,x2,y2,IMG_COLOR_STYLED)//顏色資源要改爲這個常量IMG_COLOR_STYLED

畫一個點(實用性通常用於對驗證碼產生干擾點防止一些軟件識別驗證碼)

imagesetpixel($im,x,y,color);

案例以下

<?php
header('Content-type:image/JPG');//設置輸出的圖像格式
$im = imagecreatetruecolor(500,500);//建立畫布
$red=imageColorAllocate($im,225,0,0);//建立顏色對象
$green = imagecolorallocate($im, 0,225,0); 
$blue = imagecolorallocate($im, 0,0,225); 
$white=imagecolorallocate($im, 255,255,225); 
imageFill($im,0,0,$white);//畫布背景填充顏色,默認黑色
imagesetpixel($im,250,250,$red);
for($i=0;$i<1000;$i++){
    imagesetpixel($im,mt_rand(0,500),mt_rand(0,500),$red);//此處細節,mt_rand();性能高與rand();
}
imagepng($im);                 
?>

同理把繪製點改成線就能出線干擾線,有興趣的能夠試試我下面的代碼跑着玩,每刷新一次又出現新的線條,頗有意思的

<?php
header('Content-type:image/JPG');//設置輸出的圖像格式
$im = imagecreatetruecolor(500,500);//建立畫布
$red=imageColorAllocate($im,225,mt_rand(0,255),0);//建立顏色對象
$green = imagecolorallocate($im, 0,225,0); 
$blue = imagecolorallocate($im, 0,0,225); 
$white=imagecolorallocate($im, 255,255,225); 
imageFill($im,0,0,$white);//畫布背景填充顏色,默認黑色
imagesetpixel($im,250,250,$red);
for($i=0;$i<100;$i++){
    imagesetthickness($im,mt_rand(0,50));
    $red=imageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));//建立顏色對象
    imageline($im,mt_rand(0,500),mt_rand(0,500),mt_rand(0,500),mt_rand(0,500),$red);
}
imagepng($im);                 
?>

圖像的保存和顯示

顯示咱們已經用到過了的

imagepng($im);//在瀏覽器顯示資源
imagepng($im,'文件名.png');//保存資源,路徑在和代碼所在位置同一路徑

結束後記得清理內存,圖像會佔用內存

imagedestroy($im);//操做完成後清理內存

顯示文字在圖像中(主要應用與驗證碼)

imagettftext($im,size,angle,x,y,color,$font,$text);

size:字體大小,angle:角度,起始打印位置(x,y),顏色color,font:字體資源路徑,text文字內容

案例以下

<?php
header('Content-type:image/JPG');//設置輸出的圖像格式
$im = imagecreatetruecolor(500,500);//建立畫布
$red=imageColorAllocate($im,225,0,0);//建立顏色對象
$green = imagecolorallocate($im, 0,225,0); 
$blue = imagecolorallocate($im, 0,0,225); 
$white=imagecolorallocate($im, 255,255,225); 
imageFill($im,0,0,$white);//畫布背景填充顏色,默認黑色
$font="c:/windows/fonts/simhei.ttf";//設置字體路徑,我用的是windos自帶的字體
$text='hello';//設置文本內容
for($i=0;$i<mb_strlen($text,'utf-8');$i++)//這裏mb_strlen($text,'utf-8')這裏是爲了中文的輸出,按中文計算
//字符串長度
{
    $color=imageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));//建立隨機的顏色對象
    imagettftext($im,20,mt_rand(-80,80),20+20*$i,mt_rand(20,30),$color,$font,mb_substr($text,$i,1,'utf-8'));//這裏的mb_substr一樣是爲了中文的輸出
}
imagepng($im);      
imagedestroy($im);            
?>

mb_substr( $str, $start, $length, $encoding )
$str,須要截斷的字符串
$start,截斷開始處,起始處爲0
$length,要截取的字數
$encoding,網頁編碼,如utf-8,GB2312,GBK

文本盒子的概念(實用性,指定位置打水印)

可以裝下文字的盒子

imagettfbbox ($size,$angle,$fontfile,$text)
imagettfbbox() 返回一個含有 8 個單元的數組表示了文本外框的四個角:
0   左下角 X 位置
1   左下角 Y 位置
2   右下角 X 位置
3   右下角 Y 位置
4   右上角 X 位置
5   右上角 Y 位置
6   左上角 X 位置
7   左上角 Y 位置

知道了四個角的座標點咱們就能夠來求出文本所佔的寬高,從而控制文字所在位置

<?php
header('Content-type:image/JPG');//設置輸出的圖像格式
$im = imagecreatetruecolor(500,500);//建立畫布
$red=imageColorAllocate($im,225,0,0);//建立顏色對象
$green = imagecolorallocate($im, 0,225,0); 
$blue = imagecolorallocate($im, 0,0,225); 
$white=imagecolorallocate($im, 255,255,225); 
imageFill($im,0,0,$white);//畫布背景填充顏色,默認黑色
$font="c:/windows/fonts/simhei.ttf";
$text='我愛你親愛的姑娘';
$size=30;
$box=imagettfbbox($size,0,$font,$text);
$width=$box[2]-$box[0];
$height=$box[1]-$box[7];
imagettftext($im,$size,0,250-$width/2,250,$red,$font,$text);
imagepng($im);      
imagedestroy($im);            
?>
相關文章
相關標籤/搜索