zoukankan      html  css  js  c++  java
  • 【PHP】使用GD库实现 图像生成、缩放、logo水印和简单验证码

    gd库是php最常用的图片处理库之一(另外一个是imagemagick),可以生成图片、验证码、水印、缩略图等等。要使用gd库首先需要开启gd库扩展,

    windows系统下需要在php.ini中将extension=php_gd2.dll 前边的分号去掉然后重启web服务器,

    linux系统下一般在编译php时已经开启gd库扩展,要是没有开启gd库扩展则需要先编译安装freetype ,jpegsrc,libpng再用phpize安装扩展库进行编译安装。

    图像生成:

    <?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);
    
        
     ?>

    验证码

    <?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() 的第二个参数。比如

    imagepng($im,'图片存储路径'); 

     

  • 相关阅读:
    SDUT3926 kmp
    SDUT 3930 线段树
    HDU 3277 最大流+二分
    HDU 3081 最大流+二分
    HDU 3605 最大流+状态压缩
    HDU 3572 最大流
    HDU 4576 DP
    POJ 2289 最大流
    POJ 1698 最大流
    poj 3498 最大流
  • 原文地址:https://www.cnblogs.com/richerdyoung/p/9582450.html
Copyright © 2011-2022 走看看