亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

GD庫使用小結---2

2019-11-15 02:12:01
字體:
來源:轉載
供稿:網友
GD庫使用小結---2

  接著上一篇。GD庫可以折騰很多用法出來,當然得跟畫圖相關,除了前面的驗證碼、水印外,還可以進行圖片的縮放,裁剪、旋轉等操作,這在很多應用中可以見到。

  1. 加水印

  前面已經知道,我們可以使用imagechar或者imagestring等將字符或字符串(甚至中文字符)繪制到圖像上,以達到水印的目的,還有個更好的方式,不僅能加字符水印,還能加圖片水印:imagecopy。

  原型:bool imagecopy (resource $dst_im , resource $src_im , int $dst_x , int $dst_y , int $src_x , int $src_y , int $src_w , int $src_h),看名字知道這是復制,第1、2個參數分別是目標圖像句柄、源文件句柄,加水印時,如果水印圖片是一張小圖,加在一張大圖上面,那么第一個參數就是大圖句柄,第二個參數就是小圖句柄。第3、4個參數是水印在目標圖像上的x、y坐標值,第5、6個參數是水印圖片上開始的x、y坐標值,第7、8個參數是水印圖片即將要作為水印的寬和高,因此這個方法的意思就是,將水印圖像src_im上左上角頂點坐標為(src_x, src_y)處,寬和高分別為src_w、src_h的部分復制到圖像dst_im上,再將這個dst_im圖像畫到畫布上保存或輸出,即為加過水印后的圖片了,代碼:

<?php        date_default_timezone_set('Asia/Shanghai');    define('DS', DIRECTORY_SEPARATOR);    // 加水印,文字、圖片水印,以圖片為例    function watermark($srcFile = '',  $markFile = '', $dstFile = '')    {        if(!file_exists($srcFile) || !file_exists($markFile))        {            echo 'file not exists!<br/>';            return false;        }        // 獲取原始圖片與水印圖片的寬高        list($srcWidth, $srcHeight) = getimagesize($srcFile);        list($markWidth, $markHeight) = getimagesize($markFile);        // 水印圖片不能比原始圖片像素還大        if($markWidth > $srcWidth || $markHeight > $srcHeight)        {            return false;        }        // 獲取即將被加水印的原始圖片句柄、水印圖片句柄        $dstImg = imagecreatefromjpeg($srcFile);        $markImg = imagecreatefrompng($markFile);        // 加水印的位置,簡單放在右下角        $dst_x = $srcWidth - $markWidth;        $dst_y = $srcHeight - $markHeight;        // 獲取文件信息        $fileinfo = pathinfo($srcFile);        if(empty($dstFile))        {            $dstFile = rtrim($fileinfo['dirname'], DS).DS.'mark_'.$fileinfo['filename'].date('YmdHis').mt_rand(1, 1000).'.jpeg';        }        // 將水印圖片復制到已有圖片上        imagecopy($dstImg, $markImg, $dst_x, $dst_y, 0, 0, $srcWidth, $srcHeight);        // 將新加完水印的圖片保存起來        imagejpeg($dstImg, $dstFile);        imagedestroy($dstImg);        imagedestroy($markImg);        return true;    }        $srcFile = 'G:/wamp/www/html/image/p125.jpg';  // 原圖片    $markFile = 'G:/wamp/www/html/image/ooopic_5.png'; // 水印圖片    watermark($srcFile, $markFile);

  效果:      

在這里,簡單將水印圖片放在圖片右下角,所以放在圖片的右下角要一個簡單的計算,調用imagecopy時,從水印圖片的左上角頂點(坐標0,0)開始全部(寬高傳入水印圖片寬高)復制到待加水印圖片上,然后imagejpeg繪制圖像并保存,注意類似imagejpeg(這里簡單使用它)等繪圖函數傳入第二個參數時是保存圖片為一個文件,而不是輸出到瀏覽器,所以也不需調header函數發送頭信息。

  當然還要搞清楚哪是源文件(src),哪是目標文件(dst),把一張小圖加水印到一張大圖上時,源文件是小圖水印,把它復制到大圖上,大圖就是目標。

  能用圖片作為水印,在于imagecopy的第二個參數是圖像句柄,所以可以從現有圖片來創建一個(如imagecreatefromjpeg),當然也能從現有的字符創建一個字符圖像句柄變量---使用imagecreatefromstring方法,所以這個更通用。

  2. 圖片縮放

  很多應用,圖片列表是小圖,當你點擊某一個時,才會展現完整大圖,這涉及到一個圖片收縮的處理。有兩個方法可供使用:imagecopyresized和imagecopyresampled,幾乎一樣,不同的是后者對圖片進行重采樣(貌似是我專業的詞),所以成圖質量更好(重采樣的話也得看采取哪種方法,有的會變得更渣),挑一個說:

  bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

  第一、二個參數與上面相似,如何做到縮放?比如這里,是將原圖像上左上角頂點處,坐標為(src_x, src_y),寬高為src_w、src_h的部分圖片,畫到目標圖像上坐標為(dst_x, dst_y),寬高為dst_w、dst_h的地方,所以如果目標圖片上的寬高比原圖上選取部分的寬高小的話,就成了縮小版了,當然還需要兩個左上角頂點的坐標值相同,以jpg類型為例:

<?php    date_default_timezone_set('Asia/Shanghai');    define('DS', DIRECTORY_SEPARATOR);    // 縮小圖片    /**     * @param src 原圖像路徑     * @param percent 縮小比例     * @param dstFile 保存圖片的路徑     */    function zoomPic($srcFile = '', $percent = 0.5, $dstFile = '')    {        if(!file_exists($srcFile))        {            return false;        }        list($width, $height) = getimagesize($srcFile); // 獲取寬高        ($percent <= 0 || $percent > 1) && $percent = 0.5;        $newWidth = floor($width * $percent);    // 縮小后的寬高        $newHeight = floor($height * $percent);                $dstImg = imagecreatetruecolor($newWidth, $newHeight); // 創建新圖像寬高的畫布        $srcImg = imagecreatefromjpeg($srcFile);  // 從原圖像文件創建畫布                $pathinfo = pathinfo($srcFile);        if(!$dstFile) $dstFile = rtrim($pathinfo['dirname'], DS).DS.'zoom_'.$pathinfo['filename'].date('YmdHis').mt_rand(1, 1000).".jpeg";        // 從源文件左上角頂點開始進行縮小        //imagecopyresized($dstImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);         imagecopyresampled($dstImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);         // 繪制且保存圖像        imagejpeg($dstImg, $dstFile);        // 銷毀資源        imagedestroy($dstImg);        imagedestroy($srcImg);        return true;    }    // 測試    $srcFile = 'G:/wamp/www/html/image/p179.jpg';    zoomPic($srcFile);

  效果:  

  在這里,我們可以將原圖與小圖分兩套存放,列表展示小圖,低級查就展示原圖。

  3. 圖片裁剪

  考慮上面的imagecopyresampled方法,如果不從原圖像的左上角開始,而是左上角偏右下某一點開始,切圖的寬高也再等于源文件完整的寬高,而是部分寬高,那么新的重采樣的圖片,就是源圖片的一部分,就達到了裁剪的效果,所以裁剪與縮放使用的方法一樣

  

<?php    date_default_timezone_set('Asia/Shanghai');    define('DS', DIRECTORY_SEPARATOR);    // cut a picture    function cutPic($srcFile = '', $x = 0, $y = 0, $width = 16, $height = 16, $dstFile = '')    {        if(!file_exists($srcFile))        {            return false;        }        list($srcWidth, $srcHeight, $type) = getimagesize($srcFile);        $x < 0 && $x = 0;        $y < 0 && $y = 0;        // 寬高設置        (($width + $x) > $srcWidth) && $width = $srcWidth;         (($height + $y) > $srcHeight) && $height = $srcHeight;        ($width <= 0) && $width = $srcWidth;         ($height <= 0) && $height = $srcHeight;        $dstImg = imagecreatetruecolor($width, $height);  // 目標文件資源         switch($type)        {            case IMG_GIF:                $srcImg = imagecreatefromgif($srcFile);  // 獲取源文件資源句柄及擴展名處理,以使用合適的函數和擴展                $ext = 'gif';                $imagefun = 'imagegif';                break;            case IMG_JPG:                $srcImg = imagecreatefromjpeg($srcFile);                  $ext = 'jpeg';                $imagefun = 'imagejpeg';                break;            default:                $srcImg = imagecreatefrompng($srcFile);                  $ext = 'png';                $imagefun = 'imagepng';                break;        }        // 設置保存剪切后的文件路徑        $fileinfo = pathinfo($srcFile);        if(empty($dstFile))        {            $dstFile = rtrim($fileinfo['dirname'], DS).DS.'cut_'.$fileinfo['filename'].date('YmdHis').mt_rand(1, 1000).".{$ext}";        }        // 執行剪切操作        imagecopyresampled($dstImg, $srcImg, 0, 0, $x, $y, $width, $height, $width, $height);        // 畫于畫布并保存文件        $imagefun($dstImg, $dstFile);        imagedestroy($dstImg);        imagedestroy($srcImg);        return true;    }    // 測試    $srcFile = 'G:/wamp/www/html/image/p221.jpg';    cutPic($srcFile, 50, 50, 50, 50);

  效果:    

  常見的應用是,我們在給自己的某個應用換頭像時,頭像太大,就會用到裁剪,用這就可以做一個模擬實現。

  4. 圖片旋轉

  圖片旋轉也十分常見,主要用到函數imagerotate,原型:resource imagerotate ( resource $image , float $angle , int $bgd_color [, int $ignore_transparent = 0 ] ),第一個參數是待旋轉圖像句柄,第二個參數angle是旋轉的角度數值,第三個參數指定一個顏色,即當旋轉后出現空的地方是使用哪種顏色填充,第四個參數是指定一個透明色,默認0表示保留透明色。該方法返回一個新的圖像句柄,就是經過旋轉后的圖像資源變量,將它繪制保存即可。還要注意的是,旋轉的角度可以指定0到360之間,為逆時針旋轉,以jpg為例:

<?php        date_default_timezone_set('Asia/Shanghai');    define('DS', DIRECTORY_SEPARATOR);    /**     * 圖片旋轉     * @param angular 旋轉角度值 0-360     */    function rotatePic($srcFile = '', $angular = 0, $dstFile = '')    {        if(!file_exists($srcFile))        {            echo 'file not exists<br/>';            return false;        }        $srcImg = imagecreatefromjpeg($srcFile);        // 處理保存文件地址        $fileinfo = pathinfo($srcFile);        if(empty($dstFile))        {            $dstFile = rtrim($fileinfo['dirname'], DS).DS.'rotate_'.$fileinfo['filename'].date('YmdHis').mt_rand(1, 1000).'.jpeg';        }                $white = imagecolorallocate($s
上一篇:微信輕接觸

下一篇:Memcached

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人极品视频| 亚洲人成在线播放| 高清一区二区三区日本久| 久久亚洲国产精品| 亚洲黄色免费三级| 久久成人人人人精品欧| 亚洲欧美成人精品| 国产精品三级在线| 色偷偷av一区二区三区| 亚洲美女又黄又爽在线观看| 青青久久av北条麻妃黑人| 91高清免费视频| 久久久久久免费精品| 欧美www在线| 欧美国产第二页| 性欧美xxxx交| 亚洲香蕉成人av网站在线观看| 亚洲人成网7777777国产| 97超视频免费观看| 91高清在线免费观看| 欧美日韩国产综合视频在线观看中文| 国产精品国产三级国产专播精品人| 中文字幕亚洲综合久久| 疯狂做受xxxx欧美肥白少妇| 国产97在线|亚洲| 日韩www在线| 在线观看精品自拍私拍| 成人久久一区二区三区| 日本三级韩国三级久久| 国产91成人video| 国产精品久久久久久久久久| 国产成人97精品免费看片| 国产小视频国产精品| 51久久精品夜色国产麻豆| 精品视频—区二区三区免费| 黄色成人在线免费| 欧美黑人xxx| 欧美高跟鞋交xxxxhd| 国产欧美va欧美va香蕉在线| 欧亚精品在线观看| 亚洲欧美中文字幕| 国产亚洲xxx| 成人在线视频网站| 亚洲欧美日韩综合| 伊人久久久久久久久久| 欧美专区在线观看| 国产精品久久久久久婷婷天堂| 亚洲精品二三区| 日韩欧美综合在线视频| 亚洲一区二区三区xxx视频| 亚洲自拍在线观看| 日韩亚洲精品视频| 日韩在线视频导航| 亚洲精品99久久久久中文字幕| 一区二区三区www| 日韩久久午夜影院| 亚洲国产精品推荐| 日韩av在线免费观看一区| 国产亚洲a∨片在线观看| 精品自在线视频| 欧美日本高清视频| 欧美激情视频一区二区| 欧美视频精品一区| 亚洲第一黄色网| 欧美日韩国产91| 日韩av影视在线| 91精品国产91久久久久久| 欧美性xxxx极品高清hd直播| 精品成人在线视频| 国产男人精品视频| 日韩精品视频在线播放| 国产日产欧美精品| 欧美影院在线播放| 亚洲第一黄色网| 国产精品v片在线观看不卡| 神马久久桃色视频| 美女av一区二区三区| 国产第一区电影| 亚洲激情中文字幕| 成人精品久久av网站| 国产91精品久久久久| 欧美专区福利在线| 国产婷婷97碰碰久久人人蜜臀| 91精品国产沙发| 欧美成人中文字幕| 一区二区三区四区精品| 亚洲91av视频| 91视频国产精品| 韩国日本不卡在线| 亚洲精品第一国产综合精品| 成人免费在线视频网站| 成人黄色短视频在线观看| 亚洲第一中文字幕在线观看| 亚洲国产精品悠悠久久琪琪| 日韩av网站电影| 久久久www成人免费精品张筱雨| 色综合久久久888| 国产精品久久久久久久久久免费| 国产亚洲美女精品久久久| 91免费国产视频| 91精品国产综合久久久久久久久| 久久精品国产96久久久香蕉| 亚洲加勒比久久88色综合| 欧美日韩国产精品一区二区不卡中文| 91精品国产91久久久久久久久| 国产网站欧美日韩免费精品在线观看| 亚洲国产91精品在线观看| 国产精品99久久99久久久二8| 久久综合色88| 国产精品久久国产精品99gif| 国产成人精品免高潮费视频| 55夜色66夜色国产精品视频| 亚洲女人被黑人巨大进入al| 亚洲国产日韩欧美在线图片| 亚洲a区在线视频| 久久久国产精彩视频美女艺术照福利| 黄色一区二区在线观看| 国产高清在线不卡| 欧美裸体男粗大视频在线观看| 亚洲精品电影网在线观看| 日韩av免费网站| 欧美人与性动交| 欧美色videos| 亚洲a区在线视频| 成人免费直播live| 在线观看国产精品淫| 久久久久中文字幕2018| 久久久亚洲精选| 欧美激情精品久久久| 国产精品一区久久| 狠狠躁夜夜躁人人爽超碰91| 亚洲欧美中文日韩在线| 一区二区三区无码高清视频| 国产免费亚洲高清| 日韩精品丝袜在线| 国产精品成人一区二区三区吃奶| 日韩av男人的天堂| 亚洲电影免费观看高清完整版在线观看| 黑人巨大精品欧美一区二区三区| 日韩一区二区在线视频| 国产精品久久久久久久久免费| 国产精品v片在线观看不卡| 91精品国产91久久久久久| 亚洲欧美中文在线视频| 欧美老女人性视频| 日韩精品福利在线| 91免费看片网站| 亚洲色图av在线| 国产精品一区二区三区免费视频| 91欧美日韩一区| 久久天天躁狠狠躁夜夜爽蜜月| 国产98色在线| 久久久久久高潮国产精品视| 欧美精品一区在线播放| 日韩欧美aaa| 欧美激情视频在线观看| 久久天天躁日日躁| 日韩精品有码在线观看| 国产成人久久久| 欧美丰满少妇xxxxx| 成人网址在线观看| 国产久一一精品| 麻豆国产精品va在线观看不卡| 97国产精品免费视频|