PHP生成缩略图、验证码类封装

  1 <?php
  2 /*如何知道图片的类型和大
  3  * 利用getimagesize(),获得以下属性
  4 Array
  5 (
  6     [0] => 533      //宽
  7     [1] => 300      //高
  8     [2] => 2        //图片类型 jpg
  9     [3] => width="533" height="300"
 10     [bits] => 8
 11     [channels] => 3
 12     [mime] => image/jpeg
 13 )
 14  *
 15  *
 16 $arr = getimagesize(‘./sanyecao.jpg‘);
 17 echo image_type_to_mime_type($arr[2]),‘类型<br/>‘;
 18 print_r($arr);
 19 */
 20 //先获得图片的信息
 21 //水印,把制定图片复制到目标上,并加上透明效果
 22 //缩略图:把大尺寸图片复制到小尺寸图片上
 23 class ImageTool{
 24     //image info 分析图片的信息,返回信息数组
 25     public static function imageInfo($image){
 26         //判断文件是否存在
 27         if(!file_exists($image)){
 28             return false;
 29         }
 30         $info = getimagesize($image);
 31         if($info == false){
 32             return false;
 33         }
 34         $img[‘width‘] = $info[‘0‘];
 35         $img[‘height‘] = $info[‘1‘];
 36         $img[‘ext‘] = substr($info[‘mime‘],strpos($info[‘mime‘],‘/‘)+1);
 37         //print_r($img);
 38         return $img;
 39     }
 40     //加水印
 41     //string $dst   带操作图片
 42     //$wter         水印图片
 43     //$savepath     保存路径  不填则默认替换原始图
 44     //$alpha        水印透明度
 45     //$pos          水印位置 0:左上角 1:右上角 2:左下角 3:右下角
 46     public static function water($dst,$water,$save=NULL,$pos=2,$alpha=50){
 47         if(!file_exists($dst) || !file_exists($water)){
 48             echo ‘文件不存在‘;
 49             return false;
 50         }
 51         //保证水印不能比带操作图片大
 52         $dinfo = self::ImageInfo($dst);     //原始图片信息
 53         $winfo = self::ImageInfo($water);   //水印图片信息
 54
 55         //水印图片不能大于操作图片
 56         if($winfo[‘height‘]>$dinfo[‘height‘] || $winfo[‘width‘]>$dinfo[‘width‘]){
 57             return false;
 58         }
 59         //加水印,把两张图都读到画布上  根据类型创建画布 动态加载函数
 60         $dfunc = ‘imagecreatefrom‘.$dinfo[‘ext‘];
 61         $wfunc = ‘imagecreatefrom‘.$winfo[‘ext‘];
 62         if(!function_exists($dfunc) || !function_exists($wfunc)){
 63             return false;
 64         }
 65         //动态加载函数来创建画布
 66         $dim = $dfunc($dst);        //创建带操作画布
 67         $wim = $wfunc($water);      //创建水印画布
 68         //根据水印位置计算粘贴坐标
 69         switch($pos){
 70         case 0:             //左上角
 71             $posx = 0;
 72             $posy = 0;
 73             break;
 74         case 1:             //右上角
 75             $posx = $dinfo[‘width‘]-$winfo[‘width‘];
 76             $posy = 0;
 77             break;
 78         case 3:             //左下角
 79             $posx = $dinfo[‘width‘]-$winfo[‘width‘];
 80             $posy = $dinfo[‘height‘]-$winfo[‘height‘];
 81             break;
 82         case 2:
 83         default:            //默认右下角
 84             $posx = 0;
 85             $posy = $dinfo[‘height‘]-$winfo[‘height‘];
 86             break;
 87         }
 88         //正式加水印
 89         imagecopymerge($dim,$wim,$posx ,$posy ,0 ,0 ,$winfo[‘width‘],$winfo[‘height‘],$alpha);
 90         //保存图片
 91         if(!$save){
 92             $save = $dst;
 93             unlink($dst);       //删除原图
 94         }
 95         $createfunc = ‘image‘.$dinfo[‘ext‘];
 96         $createfunc($dim,$save);
 97         imagedestroy($dim);
 98         imagedestroy($wim);
 99         return true;
100     }
101     //生成缩略图
102     //
103     //
104     public static function thumb($dst,$save=NULL,$widht=200,$height=200)
105     {
106         $dinfo = self::ImageInfo($dst);
107         //var_dump(self::ImageInfo($dst));
108         //var_dump($dinfo);
109         //判断待处理图片是否存在
110         if($dinfo == false){
111             return false;
112         }
113         //处理缩放
114         //计算缩放比例
115         //
116         $calc = min($widht/$dinfo[‘width‘],$height/$dinfo[‘height‘]);
117
118         //创建画布
119         $dfunc = ‘imagecreatefrom‘.$dinfo[‘ext‘];
120         //echo $dfunc;
121         //动态加载函数来创建画布
122         $dim = $dfunc($dst);        //创建带操作画布
123         //创建缩略画布
124         $tim = imagecreatetruecolor($widht,$height);
125         $white = imagecolorallocate($tim,255,255,255);
126         //填充缩略画布
127         imagefill($tim,0,0,$white);
128         $dwidht = $dinfo[‘width‘]*$calc;
129         $dheight = $dinfo[‘height‘]*$calc;
130
131         //留白计算
132         $paddingx = (int)($widht - $dwidht)/2;
133         $paddingy = (int)($height - $dheight)/2;
134         //复制并缩略
135         imagecopyresampled($tim,$dim,$paddingx,$paddingy,0,0,$dwidht,$dheight,$dinfo[‘width‘],$dinfo[‘height‘]);
136         //保存图片
137         if(!$save){
138             $save = $dst;
139             unlink($dst);
140         }
141         $createfunc = ‘image‘.$dinfo[‘ext‘];
142         $createfunc($tim,$save);
143         imagedestroy($dim);
144         imagedestroy($tim);
145         return true;
146     }
147     //生成验证码
148     public static function captcha($width=55,$height=28){
149         //造化布
150         $image = imagecreatetruecolor($width,$height);
151         $d_image = imagecreatetruecolor($width,$height);
152         //造背景色
153         $gray = imagecolorallocate($image,200,200,200);
154         $d_gray = imagecolorallocate($d_image,200,200,200);
155         //填充背景色
156         imagefill($image,0,0,$gray);
157         imagefill($d_image,0,0,$d_gray);
158         //造随机字体颜色
159         $color = imagecolorallocate($image,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125));
160         //造随机线条颜色
161         $color1 = imagecolorallocate($image,mt_rand(100,125),mt_rand(100,125),mt_rand(0,125));
162         $color2 = imagecolorallocate($image,mt_rand(100,125),mt_rand(100,125),mt_rand(0,125));
163         $color3 = imagecolorallocate($image,mt_rand(100,125),mt_rand(100,125),mt_rand(0,125));
164         //在画布上画线
165         imageline($image,mt_rand(0,50),mt_rand(0,25),mt_rand(0,50),mt_rand(0,25),$color1);
166         imageline($image,mt_rand(0,50),mt_rand(0,25),mt_rand(0,50),mt_rand(0,25),$color2);
167         imageline($image,mt_rand(0,50),mt_rand(0,25),mt_rand(0,50),mt_rand(0,25),$color3);
168
169         //在画布上写字
170         $text = substr(str_shuffle(‘abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ23456789‘),0,4);
171         imagestring($image,5,7,5,$text,$color);
172
173         for($i = 0; $i<60; $i++){
174             $offset = 3;        //最大波动频率
175             $round = 2;         //两个周期
176             $posy =round( SIN($i*$round*2*M_PI/60)*$offset);
177             imagecopy($d_image,$image,$i,$posy,$i,0,1,25);
178         }
179         //显示,销毁
180         ob_clean();
181         header(‘content-type:image/jpeg‘);
182         imagejpeg($d_image);
183         imagedestroy($d_image);
184         imagedestroy($image);
185
186         return $text;
187     }
188 }
189 //print_r(ImageTool::imageInfo(‘./sanyecao.jpg‘));
190 //生成水印图
191 /*
192 var_dump(ImageTool::water(‘./sanyecao.jpg‘,‘./xiao.png‘,‘./aaa1.jpg‘,0));
193 var_dump(ImageTool::water(‘./sanyecao.jpg‘,‘./xiao.png‘,‘./aaa2.jpg‘,1));
194 var_dump(ImageTool::water(‘./sanyecao.jpg‘,‘./xiao.png‘,‘./aaa3.jpg‘,2));
195 var_dump(ImageTool::water(‘./sanyecao.jpg‘,‘./xiao.png‘,‘./aaa4.jpg‘,3));
196  */
197 /*
198 生成留白的等比例缩略图
199  */
200 /*
201 var_dump(ImageTool::thumb(‘./sanyecao.jpg‘,‘./sanyecao1.jpg‘,200,200));
202 var_dump(ImageTool::thumb(‘./sanyecao.jpg‘,‘./sanyecao2.jpg‘,200,300));
203 var_dump(ImageTool::thumb(‘./sanyecao.jpg‘,‘./sanyecao3.jpg‘,300,200));
204  */
205 //生成验证码
206 $tool = new ImageTool;
207 $aa = $tool -> captcha();
208 var_dump($aa);
209 ?>
时间: 2024-08-03 02:05:59

PHP生成缩略图、验证码类封装的相关文章

4-5验证码类封装

1.Captcha.php 1 <?php 2 /** 3 * Captcha.php 4 5 * description 验证码类 6 */ 7 8 namespace Imooc\Lib; 9 10 require_once 'GDBasic.php'; 11 12 class Captcha extends GDBasic 13 { 14 //图像宽度 15 protected $_width = 60; 16 //图像高度 17 protected $_height = 25; 18 1

【PHP缩略图类】手机照片不能生成缩略图问题以及解决方案

[本文原创,谢绝转载] 一.出现的问题 这几天做了手机上传照片并裁出缩略图的接口的测试,发现不管怎么,生成的缩略图都是一片漆黑.:-( 然后就把这个缩略图类单拿出来进行测试,发现只要是手机拍出来的照片都不能进行缩略图的处理.... 二.问题分析以及解决方案 经过群里的请教,发现问题可能是出现在文件的类型的判断上,因为png图片自带一个透明的图层,导致不能直接转换成jpg的文件,而手机排出的照片扩展名是jpg. 所以,得出的结论是手机拍出的是jpg扩展名的png图片. 由于扩展名是可以随意修改的,

生成随机验证码工具类

生成随机验证码 package com.web; //验证码生成处理类 import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.geom.Line2D; import java.awt.ima

一个生成网页验证码的类 (mycome-validate)

一个小练习 可以通过 BufferedImage next() 返回一个内存图片 也可以通过String void next(OutputStream out) 写到一个输出流中,并返回验证码的值 jar包下载:http://files.cnblogs.com/mycome/mycome-validate.zip package validate; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; i

图片处理类,实现图片处理,包括添加水印和生成缩略图

<?php /** *=================================================================== * image.class.php 图片处理类,实现图片处理,包括添加水印和生成缩略图 * @author 王超平 * @copyright 传智播客PHP学院 2006-2013 * @version 1.0 * 2013年3月25日22:10:38 *===========================================

php 图片操作类,支持生成缩略图,添加水印,上传缩略图

<?php class Image {     //类开始     public $originimage = ""; //源图片文件地址     public $imageext = ""; //源图片格式     public $thumbimage = ""; //缩略图文件存放地址     public $thumb_maxwidth = 1440; //缩略图最大宽度     public $thumb_maxheight = 9

生成缩略图的PHP上传图片类

做图片类网站的朋友可能都有自己上传图片的方式方法.这里给大家介绍一个php上传图片类,它可以验证上传文件是否为图片,图片的格式是否是网站所接受的:还可以生成指定大小的缩略图.具体方法如下所示: <?phpclass UploadComponent { var $imageData = array(); var $destinationDir = NULL; var $thumbDestinationDir = NULL; var $imageSize = array(500,500); var

php生成验证码类

php生成验证码类 直接看代码 <?php session_start(); class Code{ //资源 private $img; //画布宽度 private $width=100; //画布高度 private $height=30; //背景颜色 private $bgColor='#ffffff'; //验证码 private $code; //验证码的随机种子 private $codeStr='23456789abcdefghjkmnpqrstuvwsyz'; //验证码长度

.NET 等宽、等高、等比例、固定宽高生成缩略图 类

根据原图片生成等比缩略图 #region 根据原图片生成等比缩略图 /// <summary> /// 根据源图片生成缩略图 /// </summary> /// <param name="imgPath_old">源图(大图)物理路径</param> /// <param name="imgPath_new">缩略图物理路径(生成的缩略图将保存到该物理位置)</param> /// <p