一、生成帶有文字的普通圖片php
// 一、新建空白畫布 建立一個真顏色(黑白)的圖片 $width = $height = 200; $img = imagecreatetruecolor($width, $height); //二、選擇一個顏色用於背景 $red = $green = $blue = 244; $bgc = imagecolorallocate($img, $red, $green, $blue); //三、將背景顏色填充到畫布中,在(0,0)左上角填充 $x = $y = 0; imagefill($img, $x, $y, $blue); //四、選擇一個顏色用於字符 $cred = $cgreen = $cblue = 7; $color = imagecolorallocate($img, $cred, $cgreen, $cblue); //五、選擇一個字符串在畫布的(0,0)左上角進行繪製顏色爲color $cx = $cy = 0; $font = 5;//值爲1-5 $str = 'hello';//只能輸入英文 imagestring($img, $font, $cx, $cy, $str, $color); //六、把生成好的圖片保存 imagepng($img,'image/1.png'); //七、關閉畫布 imagedestroy($img);
imagefill():將圖片填充到畫布中的操做相似於在畫圖工具中使用填充工具將顏色塗滿畫布,在哪裏'點擊'均可以,只不過在畫布左上角(0,0)上填充最方便。
代碼中全部有關顏色的參數都相似於Css中的rgb()屬性,其屬性值爲0~255
結果以下:算法
二、生成複雜驗證碼圖片(有線條和雜點)數組
//一、創建畫布 $img = imagecreatetruecolor('200', '80'); //二、生成並填充背景色 $bgc = imagecolorallocate($img, 220, 220, 200); imagefill($img, 0, 0, $bgc); //三、用隨機的顏色在隨機的位置生成20條線段 for ($i = 0; $i < 20; $i++) { $x1 = mt_rand(0, 200); $y1 = mt_rand(0, 80); $x2 = mt_rand(0, 200); $y2 = mt_rand(0, 80); $red = mt_rand(0, 255); $green = mt_rand(0, 255); $blue = mt_rand(0, 255); $color = imagecolorallocate($img, $red, $green, $blue); imageline($img, $x1, $y1, $x2, $y2, $color); } //四、用隨機的顏色在隨機的位置生成100個像素點 for ($i = 0; $i < 100; $i++) { $x = mt_rand(0, 200); $y = mt_rand(0, 80); $color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); imagesetpixel($img, $x, $y, $color);//像素點小可使用圓 } //五、用隨機的顏色在隨機的位置生成驗證碼文字 for ($i = 0; $i < 4; $i++) { $size = 80/2;//單位 px 大小爲高度的一半 $angle = mt_rand(-30, 30);//水平x軸爲0度 $x = $i * 200 / 4; $y = 80*3/4; //文字左下角爲錨點(x,y) x平分畫布的寬度,y爲畫布高度的3/4, $color = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); $fontfile = __DIR__ . '/fonts/FZSTK.TTF';//字體文件的絕對路徑(必須),文件大於3M爲中文字體文件 $str = 'qwertyuipasdfghjklzxcvbnmQWERTYUIPASDFGHJKLZXCVBNM123456789'; $text = $str[mt_rand(0, strlen($str))]; imagettftext($img, $size, $angle, $x, $y, $color, $fontfile, $text); } //六、保存 header("content-type:image/png");//網頁內容爲圖片類型 imagepng($img);//只有第一個參數,不會保存但顯示在頁面。 //七、銷燬 imagedestroy($img);
imagepng()有兩個參數,第一個參數是處理事後的圖片;第二個參數是圖片存儲的路徑和文件名(非必需),兩個參數都有便可保存圖片,而只有第一個參數,圖片不會保存,但能夠當即顯示在設備上,
不過要在顯示前使用header()從新定義頁面內容爲圖片格式,不然爲文本格式會顯示出一堆亂碼。
結果以下:函數
三、給圖片添加文字水印工具
<?php //一、導入圖片,並計算寬高 $img = imagecreatefromjpeg('image/33.jpg'); $width = imagesx($img); $height = imagesy($img); //2,計算文本的寬高 $text = '@輕點,疼'; $fontfile = __DIR__ . '/fonts/FZSTK.TTF';//字體文件的絕對路徑(必須),文件大於3M爲中文字體文件 $textinfo = imagettfbbox(20, 0, $fontfile, $text);//返回一個含有8個字段的數組,每兩個字段一組,爲一個角的x,y;左下-右下-右上-左上 $twidth = $textinfo[2] - $textinfo[0];//文本寬 $theight = $textinfo[1] - $textinfo[5];//文本高 //三、將文本填充進圖片右下角 $x = $width - $twidth; $y = $height; $color = imagecolorallocate($img, 255, 255, 255); imagettftext($img, 20, 0, $x, $y, $color, $fontfile, $text); //四、查看並銷燬 header('content-type:image/jpg'); imagejpeg($img); imagedestroy($img);
代碼中imagettfbbox()的參數分別爲字體大小,角度,字體庫文件和字符內容,其中角度以水平x軸爲0度,字體庫路徑必須爲絕對路徑,如要使用中文,則必須導入中文字體庫(通常大於3M)。函數返回值是一個
一維數組,以下所示:
結果以下:字體
四、將圖片內容設爲水印添加到其它圖片ui
<?php $dst_im = imagecreatefromjpeg('image/33.jpg');//背景圖片 $src_im = imagecreatefromjpeg('image/22.jpg');//要拼接圖片 $dst_x = 537;//從背景圖片dst_im的(dst_x,$dst_y)處拼接 $dst_y = 358; $src_x = 64;//從src_im的(src_x,src_y)處獲取寬爲src_w,高爲src_h的圖片 $src_y = 370; $src_w = 153; $src_h = 148; //沒有透明度 imagecopy($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h); //帶有透明度 $dst_y-=200; $pct=50;//透明度 值爲1~100 對應透明~不透明 imagecopymerge($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h,$pct); header('content-type:image/jpg'); imagejpeg($dst_im); imagedestroy($dst_im); imagedestroy($src_im);
結果以下:spa
五、將圖片進行縮放並顯示在原圖上code
<?php $dst_im = imagecreatefromjpeg('image/33.jpg');//背景圖片 $src_im = imagecreatefromjpeg('image/22.jpg');//要拼接圖片 $dst_x = 537;//從背景圖片dst_im的(dst_x,$dst_y)處拼接 $dst_y = 358; $src_x = 64;//從src_im的(src_x,src_y)處獲取寬爲src_w,高爲src_h的圖片 $src_y = 370; $src_w = 153; $src_h = 148;//縮放前的尺寸 $dst_w=$dst_h=50;//縮放後的尺寸 //一、imagecopyresampled 生成的圖片質量更高,處理速度更慢而且佔用必定的CPU資源。 imagecopyresampled($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y,$dst_w,$dst_h, $src_w, $src_h); //二、imagecopyresized 縮放圖像的算法比較粗糙.處理速度快,只適合不要求清晰度但須要迅速生成縮略圖的狀況。 $dst_x+=100; imagecopyresized($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y,$dst_w,$dst_h, $src_w, $src_h); header('content-type:image/jpg'); imagejpeg($dst_im); imagedestroy($dst_im); imagedestroy($src_im);
結果以下:blog
六、縮略圖
//一、打開原圖,獲取寬,高 $img=imagecreatefromjpeg('image/11.jpg'); $src_w=imagesx($img); $src_h=imagesy($img); //二、設置縮放比例,並建立空白畫布 $scale=0.1; $dst_w=$src_w*$scale; $dst_h=$src_h*$scale; $dst_im=imagecreatetruecolor($dst_w,$dst_h); //三、將原圖img的寬高縮放爲(dst_w,dst_h)並放置到dst_im上。 imagecopyresampled($dst_im, $img, 0, 0, 0, 0,$dst_w,$dst_h, $src_w, $src_h); header('content-type:image/jpeg'); imagecopyresized($dst_im, $img, 0, 0, 0, 0,$dst_w,$dst_h, $src_w, $src_h); imagejpeg($dst_im,'image/resampled.jpg');//文件更小,更清晰 imagejpeg($dst_im,'image/resized.jpg'); imagedestroy($dst_im); imagedestroy($img);
結果以下: