0

0

php 上传图片自动生成缩略图

php中文网

php中文网

发布时间:2016-06-13 09:48:57

|

1412人浏览过

|

来源于php中文网

原创

一款实现的生成小图功能的实现代码,有需要的朋友可以参考,每个都有详细的说明参数。

 代码如下 复制代码


 

 

uploads.php文件

REimagine Home: AI
REimagine Home: AI

上传室内图片,AI自动为你生成多种家居软装效果图

下载

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;  //上传文件的新名字
 
 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 "%%%
";
  }
  
  if(is_uploaded_file($this->tmp)){
   if(move_uploaded_file($this->tmp, $this->new_name)){
    echo "文件上传成功
";
    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文件中得配置
";
     break;
    case 2:
     echo "上传文件的大小超过了表单中的限制大小
";
     break;
    case 3:
     echo "只有部分文件被上传
";
     break;
    case 4:
     echo "没有文件被上传
";
     break;
    case 6:
     echo "php.ini中没有设置图片存放的临时未知
";
     break;
    case 7:
     echo "硬盘不可以写入,上传失败
";
     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();
  }
 
?>


 

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

0

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

12

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

22

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

18

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

7

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

2

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

40

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.6万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号