php生成验证码,缩略图及水印图的类分享


Posted in PHP onApril 07, 2016

封装了一个类,可生成验证码,缩略图,及水印图,分享给大家

<?php
class image{
  session_start();
  //验证码类
  static public function verify($code,$width=75,$height=25,$n=4){
    header("content-type:image/png");
    // 创建画布
    $img=imagecreatetruecolor($width,$height);
    // 设置背景色
    $bgcolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));
    // 将背景色填充
    imagefill($img,0,0,$bgcolor);
    // 绘制五条弧线
    for($i=0;$i<5;$i++){
      $arccolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));
      imagearc($img,mt_rand(5,($width-5)),mt_rand(5,($height-5)),mt_rand(5,($width-5)),mt_rand(5,($height-5)),mt_rand(0,360),mt_rand(0,360),$arccolor);
    }
    // 绘制一百个点
    for($i=0;$i<100;$i++){
      $pixelcolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));
      imagesetpixel($img,mt_rand(1,($width-1)),mt_rand(1,($height-1)),$pixelcolor);
    }
    // 绘制五条线段
    for($i=0;$i<5;$i++){
      $linecolor=imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),rand(200,255));
      imageline($img,mt_rand(1,($width-1)),mt_rand(1,($height-1)),mt_rand(1,($width-1)),mt_rand(1,($height-1)),$linecolor);
    }
    // 设置边框颜色
    $bdcolor=imagecolorallocate($img,mt_rand(150,200),mt_rand(150,200),rand(150,200));
    // 绘制一个矩形无填充边框
    imagerectangle($img,0,0,($width-1),($height-1),$bdcolor);
    // 设置验证码字符串
    $str='';
    for($i=1;$i<=$n;$i++){
      $str.=substr(str_shuffle($code),0,1);
    }
    $_SESSION['a']=$str;
    //
    for($i=0;$i<$n;$i++){
      $textcolor=imagecolorallocate($img,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
      imagettftext($img,1/($n+1)*$width,mt_rand(-20,20),((1-$n/(5+$n))*$width/($n-1)+$i*1/($n+1)*$width),1/2*($height+3/5*$height),$textcolor,'1.ttf',substr($str,$i,1));
    }
    // 打印图像
    imagepng($img);
    // 释放资源
    imagedestroy($img);
    return $str;
  }
  //缩略图类
  /*
  *$source需要缩略的图片
  */
  static public function thumbnail($source,$deletesource=false,$width=180){
    $info=getimagesize($source);
    //getimagesize方法获得图像的详细信息
    $createFun=str_replace('/','createfrom',$info['mime']);
    //将getimagesize中的['mime']中的/替换,变为imagecreatefromjpeg方法
    $src=$createFun($source);
    //创建图像
    $dst_w=$width;
    //缩略图的宽
    $dst_h=$width/$info[0]*$info[1];
    //计算缩略图的高
    $dst=imagecreatetruecolor($dst_w,$dst_h);
    //新建一个真彩色图像
    imagecopyresampled($dst,$src,0,0,0,0,$dst_w,$dst_h,$info['0'],$info['1']);
    //重采样拷贝部分图像并调整大小
    $saveFun=str_replace('/','',$info['mime']);
    //设置保存函数
    $ext=strrchr($source,'.');
    //strrchr查找指定字符在字符串中的最后一次出现,返回包括其自身在内的剩余的字符串
    $thumbnailName=str_replace($ext,'',$source).'_thumbnail'.$ext;
    //设置保存路径
    if(!$deletesource){
      $saveFun($dst,$thumbnailName);
      //保存图像
    }else{
      $saveFun($dst,$thumbnailName);
      unlink($source);
      //删除原图
    }
    imagedestroy($src);
    //销毁资源
    imagedestroy($dst);
    //销毁资源
    return $thumbnailName;
 
  }
  //水印图类
  /*
  *$srcing水印图
  *$dsting原图
  */
  static public function watermark($dstimg,$srcimg){
    $dstinfo=getimagesize($dstimg);
    //getimagesize方法获取该图片的详细信息(该方法返回的是一个详细的数组)
    $srcinfo=getimagesize($srcimg);
    $createdst=str_replace('/','createfrom',$dstinfo['mime']);
    //将getimagesize方法返回的数组中的mime值中的/替换,结果为imagecreatefromjpeg
    $createsrc=str_replace('/','createfrom',$srcinfo['mime']);
    $dst=$createdst($dstimg);
    //替换后为imagecreatefromjpeg函数,创建一个图像
    $dst_w=imagesx($dst);
    //获取大图的宽
    $dst_h=imagesy($dst);
    //获取大图的高
    $src=$createsrc($srcimg);
    //替换后为imagecreatefromjpeg函数,创建一个图像
    $src_w=imagesx($src);
    //获取水印图的宽
    $src_h=imagesy($src);
    //获取水印图的高
    $watermaker=imagecopy($dst,$src,($dst_w-$src_w),($dst_h-$src_h),0,0,$src_w,$src_h);
    //将水印图复制在大图上
    $saveFun=str_replace('/','',$dstinfo['mime']);
    //将getimagesize返回数组中的['mime']中的斜杠替换为空,替换后的值为imagejpeg,即为保存函数
    $ext=strrchr($dstimg,'.');
    //strrchr查找指定字符在字符串中的最后一次出现,返回包括其自身在内的剩余的字符串
    $watermaker=str_replace($ext,'',$dstimg).'_water'.time().$ext;
    //保存名
    $saveFun($dst,$watermaker);
    //保存图片,第一个参数为要保存的图片,第二个参数为保存路径或保存名
    imagedestroy($dst);
    //销毁资源
    imagedestroy($src);
    //销毁资源
    return $watermaker;
 
  }
 
}
?>
PHP 相关文章推荐
PHP 字符串分割和比较
Oct 06 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
Mar 11 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
smarty模板引擎之配置文件数据和保留数据
Mar 30 PHP
PHP常用处理静态操作类
Apr 03 PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 PHP
PHP 5.6.11中CURL模块问题的解决方法
Aug 08 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
laravel实现上传图片并在页面显示的例子
Oct 14 PHP
PHP使用token防止表单重复提交的方法
Apr 07 #PHP
PHP使用Mysqli类库实现完美分页效果的方法
Apr 07 #PHP
Linux下编译redis和phpredis的方法
Apr 07 #PHP
php 实现进制相互转换
Apr 07 #PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 #PHP
php制作简单模版引擎
Apr 07 #PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 #PHP
You might like
php绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
js静态作用域的功能。
2006/12/25 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
EASYUI TREEGRID异步加载数据实现方法
2012/08/22 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
详细分析JavaScript函数定义
2015/07/16 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
详解如何使用Node.js编写命令工具——以vue-cli为例
2017/06/29 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
微信小程序-getUserInfo回调的实例详解
2017/10/27 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
Python群发邮件实例代码
2014/01/03 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
Python socket服务常用操作代码实例
2020/06/22 Python
java字符串格式化输出实例讲解
2021/01/06 Python
Python的collections模块真的很好用
2021/03/01 Python
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
Herschel美国官网:背包、手提袋及配件
2020/03/10 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
甜点店创业计划书
2014/01/27 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
如何做好工作总结!
2019/04/10 职场文书
Win10 Anaconda安装python-pcl
2022/04/29 Servers