【PHP】使用GD庫實現 圖像生成、縮放、logo水印和簡單驗證碼

gd庫是php最經常使用的圖片處理庫之一(另一個是imagemagick),能夠生成圖片、驗證碼、水印、縮略圖等等。要使用gd庫首先須要開啓gd庫擴展,php

windows系統下須要在php.ini中將extension=php_gd2.dll 前邊的分號去掉而後重啓web服務器,linux

linux系統下通常在編譯php時已經開啓gd庫擴展,要是沒有開啓gd庫擴展則須要先編譯安裝freetype ,jpegsrc,libpng再用phpize安裝擴展庫進行編譯安裝。web

 

圖像生成:windows

<?php
    /*
     用windows畫圖板畫圖
      1.新建空白畫布(指定寬高)
      2.建立顏料.(紅,r 綠g  藍b,三原色組成的. 三原色由弱到強各能夠選0-255之間)
      3.畫線,寫字,畫圖形,填充等
      4.保存/輸出圖片
      5.銷燬畫布
     */


    //用gd庫來畫圖,還是以上5個步驟.
    // 1:造畫布,以資源形式返回 imagecreatetruecolor(寬,高);
    $im = imagecreatetruecolor(300,200);


    // 2: 建立顏料 imagecolorallocate(畫布, 紅,綠,藍)
    $gray = imagecolorallocate($im,100,100,100);

    // 3: 填充畫布
    imagefill($im,0,0,$gray);


    // 4: 保存成圖片 imagepng(畫布 [, 保存位置 ]),imagejpeg(),imagegif()
    header('content-type:image/jpeg');
    imagepng($im);

    // 5: 銷燬畫布  銷燬畫面 imagedestroy(畫布) 
    imagedestroy($im);

?>

 

縮率圖瀏覽器

<?php 
    /*
    步驟:
     1.打開圖片源文件資源
     2.得到源文件的寬高
     3.使用固定的公式計算新的寬高
     4.生成目標圖像資源
     5.進行縮放
     6.保存圖像
     7.釋放資源
     */
    //1.打開圖片源文件資源
    $im = imagecreatefromjpeg('./bg.jpg');

    //2.得到源文件的寬高
    $fx = imagesx($im); // 獲取寬度
    $fy = imagesy($im); // 獲取高度


    //3.使用固定的公式計算新的寬高
    $sx = $fx/2;
    $sy = $fy/2;
    //4.生成目標圖像資源
    $small = imagecreatetruecolor($sx,$sy);


    //5.進行縮放
    imagecopyresampled($small,$im,0,0,0,0,$sx,$sy,$fx,$fy);

    //6.保存圖像
    if(imagejpeg($small,'./sbg.jpg')) {
     echo '保存成功';
    } else {
         echo '保存失敗';
    }
    //7.釋放資源
    imagedestroy($im);
    imagedestroy($small);

 ?>

 

水印生成服務器

<?php 
    /*
    步驟:
        1.分別建立大小圖畫布並獲取它們的寬高
        2.添加文字水印
        3.執行圖片水印處理
        4.輸出
        5.銷燬畫布
     */
    //1.分別建立大小圖畫布並獲取它們的寬高
    $big = imagecreatefromjpeg('./bg.jpg');
    $bx = imagesx($big);
    $by = imagesy($big);

    $small = imagecreatefrompng('./tu.png');
    $sx = imagesx($small);
    $sy = imagesy($small);


    //2.添加水印文字
    $blue = imagecolorallocate($big,0,0,255);
    imagettftext($big,16,0,100,100,$blue,'./msyh.ttf','驕傲的少年');

    //3.執行圖片水印處理
    imagecopymerge($big,$small,$bx-$sx,0,0,0,$sx,$sy,37);

    //4.輸出到瀏覽器
    header('content-type: image/jpeg');
    imagejpeg($big);

    //5.銷燬畫布
    imagedestroy($big);
    imagedestroy($small);

    
 ?>

 

驗證碼spa

<?php 
    /*
    步驟:
        1.建立畫布
        2.造顏料
        3.填充背景顏色
        4.畫干擾點
        5.畫噪點
        6.寫字符串
        7.輸出圖片
        8.銷燬畫布
     */
    //1.建立畫布
    $im=imagecreatetruecolor(50, 30);

    //2.造顏料
    $gray = imagecolorallocate($im,30,30,30);
    $red = imagecolorallocate($im,255,0,0);
    $blue = imagecolorallocate($im, 100, 255, 255);

    //3.填充背景顏色  
    imagefill($im,0,0,$blue);

    //4.畫干擾點
    for ($i=0; $i <4 ; $i++) { 
         imageline($im, rand(0,20),0,100,rand(0,60),$red);
    }

    //5.畫噪點   
        for($i=0;$i<100;$i++){   
            imagesetpixel($im,rand(0,50),rand(0,30),$gray);   
        } 

    //6.寫字符串
    $str=substr(str_shuffle('ABCDEFGHIJKMNPQRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'),0,4);
    imagestring($im,5,5,5,$str,$red);
    
    //7.輸出圖片   
        header('content-type:image/png');   
        imagepng($im); 

        //8.銷燬畫布
        imagedestroy($im);


?>

 

 

在使用過程當中。若是隻是須要輸出圖片。能夠使用  imagepng() 的第二個參數。好比code

imagepng($im,'圖片存儲路徑'); 
相關文章
相關標籤/搜索