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的范围解析操作符(::)的含义分析说明
Jul 03 PHP
php生成zip压缩文件的方法详解
Jun 09 PHP
php抽奖小程序的实现代码
Jun 18 PHP
php计算数组不为空元素个数的方法
Jan 27 PHP
PHP中鲜为人知的10个函数
Feb 28 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
PHP中加密解密函数与DES加密解密实例
Oct 17 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
php通过strpos查找字符串出现位置的方法
Mar 17 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
Nov 04 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
visual studio code 调试php方法(图文详解)
Sep 15 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+MSSQL分页的例子
2006/10/09 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
js精准的倒计时函数分享
2016/06/29 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
js实现弹窗效果
2020/08/09 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
[01:55]2014DOTA2国际邀请赛快报:国土生病 紧急去医院治疗
2014/07/10 DOTA
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
Python 反转字符串(reverse)的方法小结
2018/02/20 Python
python方法生成txt标签文件的实例代码
2018/05/10 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
2019/01/09 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
Python新手学习raise用法
2020/06/03 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
六一儿童节活动策划方案
2014/01/27 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
三严三实心得体会范文
2014/10/13 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
五好家庭申报材料
2014/12/20 职场文书
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python