• 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);
    
    
    ?>
    
  • 相关阅读:
    Access中出现改变字段“自己主动编号”类型,不能再改回来!(已解决)
    移动闭塞
    信号系统基本设备介绍——应答器
    行车闭塞
    计轴
    联锁
    SqlServer 查看缓存 并合理设置最大内存
    SQL Server中bcp命令的用法以及数据批量导入导出
    5 个免费的受欢迎的 SQLite 管理工具
    Qt之操作数据库(SQLite)
  • 原文地址:https://www.cnblogs.com/weblm/p/5770281.html
Copyright © 2020-2023  润新知