php 上传图片自动生成缩略图
一款实现的生成小图功能的实现代码,有需要的朋友可以参考,每个都有详细的说明参数,php 上传图片自动生成缩略图实例代码如下:
- <form action="uploads.php" method="post" enctype="multipart/form-data">
 - <input type='file' name='image'><br>
 - <input type='submit' name='sub' value='提交'>
 - </form>
 - //uploads.php文件
 - <?php
 - class image_upload{
 - private $srcimg; //原图片
 - private $destimg; // 目标图片
 - private $width; //原图片的宽度
 - private $height; //原图片的高度
 - private $type; //原文件的图片类型
 - private $thumb_width; //缩略图的宽度
 - private $thumb_height; //缩略图的高度
 - private $cut; //是否剪切图片到指定高度
 - private $tmp; //上传图片的临时地址
 - private $error;
 - private $im; // 创建一个临时的图片句柄
 - private $new_name; //上传文件的新名字
 - //开源代码phpfensi.com
 - function __construct($srcimg,$t_width,$t_height,$cut,$tmp,$error){
 - $this->srcimg=$srcimg;
 - $this->thumb_width=$t_width;
 - $this->thumb_height=$t_height;
 - $this->cut=$cut;
 - $this->tmp=$tmp;
 - $this->error=$error;
 - $this->get_srcimg_type();
 - $this->get_new_upload_name();
 - }
 - function img_upload(){
 - //文件上传的方法
 - $this->check_error($this->error);
 - $this->in_type();
 - $dst_dir='./images';
 - if(!is_dir($dst_dir)){
 - mkdir($dst_dir);
 - echo "%%%<BR>";
 - }
 - if(is_uploaded_file($this->tmp)){
 - if(move_uploaded_file($this->tmp, $this->new_name)){
 - echo "文件上传成功<br>";
 - return true;
 - }else{
 - echo '文件不能被移动,上传失败';
 - exit;
 - }
 - }else{
 - echo '文件上传可能被攻击';
 - exit;
 - }
 - }
 - function make_thumbnail(){
 - //生成缩略图的方法
 - $this->get_dest_imgpath();
 - $this->make_im();
 - $this->width=imagesx($this->im);
 - $this->height=imagesy($this->im);
 - $thumb_ratio=$this->thumb_width/$this->thumb_height;
 - $ratio=$this->width/$this->height;
 - if($this->cut==1){ //是否裁剪
 - if($ratio>=$thumb_ratio){
 - $img=imagecreatetruecolor($this->thumb_width, $this->thumb_height);
 - imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_height, $this->height*$thumb_ratio, $this->height);
 - imagejpeg($img,$this->destimg);
 - echo "缩略图生成成功";
 - }else{
 - $img=imagecreatetruecolor($this->thumb_width, $this->thumb_height);
 - imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_height, $this->width, $this->width/$thumb_ratio);
 - imagejpeg($img,$this->destimg);
 - echo "缩略图生成成功";
 - }
 - }else{
 - if($ratio>=$thumb_ratio){
 - $img=imagecreatetruecolor($this->thumb_height*$thumb_ratio, $this->thumb_height);
 - imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_height*$thumb_ratio, $this->thumb_height, $this->width, $this->height);
 - imagejpeg($img,$this->destimg);
 - echo "缩略图生成成功";
 - }else{
 - $img=imagecreatetruecolor($this->thumb_width, $this->thumb_width/$thumb_ratio);
 - imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_width/$thumb_ratio, $this->width, $this->height);
 - imagejpeg($img,$this->destimg);
 - echo "缩略图生成成功";
 - }
 - }
 - imagedestroy($this->im);
 - imagedestroy($img);
 - }
 - private function check_error($error){
 - //检查文件上传传得错误;
 - if($error>0){
 - switch($error){
 - case 1:
 - echo "上传文件的大小超过了PHP.INI文件中得配置<br>";
 - break;
 - case 2:
 - echo "上传文件的大小超过了表单中的限制大小<br>";
 - break;
 - case 3:
 - echo "只有部分文件被上传<br>";
 - break;
 - case 4:
 - echo "没有文件被上传<br>";
 - break;
 - case 6:
 - echo "php.ini中没有设置图片存放的临时未知<br>";
 - break;
 - case 7:
 - echo "硬盘不可以写入,上传失败<br>";
 - break;
 - default:
 - echo "未知错误";
 - break;
 - }
 - }
 - }
 - private function get_srcimg_type(){
 - //判断源文件的图片类型
 - $this->type=substr(strrchr($this->srcimg, '.'),'1');
 - }
 - private function in_type(){
 - //检查文件是否符合类型
 - $type_arr=array('gif','jpg','png');
 - if(!in_array($this->type, $type_arr)){
 - echo "只支持PNG,GIF,JPG 三种类型的文件格式……,请重新上传正确的格式";
 - exit;
 - }
 - }
 - private function get_new_upload_name(){
 - //上传的文件生成新的名字
 - $this->new_name='images/'.date('YmdHis').'.'.$this->type;
 - }
 - private function make_im(){
 - //从原文件新建一幅图像
 - switch($this->type){
 - case 'jpg':
 - $this->im=imagecreatefromjpeg($this->new_name);
 - break;
 - case 'gif':
 - $this->im=imagecreatefromgif($this->new_name);
 - break;
 - case 'png':
 - $this->im=imagecreatefrompng($this->new_name);
 - break;
 - }
 - }
 - private function get_dest_imgpath(){
 - //得到缩略图的存储路径
 - $len1=strlen($this->new_name);
 - $len2=strlen(strrchr($this->new_name,'.'));
 - $len3=$len1-$len2;
 - $this->destimg=substr($this->new_name,0,$len3).'_small.'.$this->type;
 - }
 - }
 - print_r($_FILES);
 - $file=$_FILES['image'];
 - echo $file['name'];
 - $uploads=new image_upload($file['name'], 120, 160, 1, $file['tmp_name'],$file['error'] );
 - if($uploads->img_upload()){
 - $uploads->make_thumbnail();
 - }
 - ?>