在生成图片的缩略图,比如宽和高的比例时,可以自由修改。这个类可用于配合前段的iframe表单元素,生成无刷新的上传图片,并在前段指定区域立即显示的效果。其实还可以再加一个属性,把任何服务器错误都替换成一个更加友好的提示信息并返回给前段

<?php
require_once "sql.tool.php";
class Picture
{//上传文件private $upfile;//保存后的源文件private $img;//上传文件的类型private $fileType;//上传图片保存的路径private $path;//上传图片的名字private $fname;//缩略图的宽度private $width;//缩略图的高度private $height;//错误信息private $noticeMsg=null;private $sql;public function __construct($upfile){$config = require "config.php";$this->width=$config['image']['width'];$this->height=$config['image']['height'];if(is_uploaded_file($upfile['tmp_name'])){$this->upfile = $upfile;}else{$this->noticeMsg = '非法文件';}$this->sql = new Sql();$this->moveFile();$this->zoomInPic();echo "<script> parent.document.getElementById('feedback').innerHTML='{$this->noticeMsg}'</script>";}private function checkFilesStatus(){//上传失败,分析原因if($this->upfile['error']>0){switch($this->upfile['error']){case 1://超过表单定义的MAX_FILE_SIZE$this->noticeMsg = '文件太大';break;case 2://超过系统定义,php.ini中设定的$this->noticeMsg = '文件太大';break;case 3:$this->noticeMsg = '文件不完整';break;case 4:$this->noticeMsg = '文件为空';break;}return 0;}else{//上传成功$this->noticeMsg = '上传成功';return 1;}}//检测上传文件类型private function checkFileType(){$fileType = strtolower(substr(strchr($this->upfile['name'],'.'),1));$this->fileType = $fileType;$defaultType=array('jpg', 'jpeg', 'png', 'gif');if(!in_array($fileType, $defaultType)) {$this->noticeMsg='文件类型不对';return 0;}return 1;}//保存上传文件private function moveFile(){if($this->checkFilesStatus() && $this->checkFileType()){$dirName = './upload/'.date("Ymd");if(!is_dir($dirName)){    mkdir($dirName,0777, true);}$toFileName = $dirName."/".time().mt_rand(1,500).$this->upfile['name'];$this->path = $dirName;if(!move_uploaded_file($this->upfile['tmp_name'], $toFileName)) {die('移动文件失败');//系统错误}else{$this->img = $toFileName;}}}private function fileName(){$fname = basename($this->upfile['name'], strchr($this->upfile['name'], '.'));$this->fname = time().mt_rand(1,500).$fname.'small';}//生成图片缩略图private function zoomInPic(){$src;$this->fileName();switch($this->fileType){case 'jpg':case 'jpeg':$src = imagecreatefromjpeg($this->img);break;case 'gif':$src = imagecreatefromgif($this->img);break;case 'png':$src = imagecreatefrompng($this->img);break;}//获取上传图片的宽和高$src_w = imagesx($src);$src_h = imagesy($src);//生成缩略图//在属性里定义缩略图的宽和高,并将原图按照比例缩放//缩放算法是: 新宽/原宽 = 新高/原高,这样就能等比例缩放了...../* if($src_w > $src_h){$new_w = $this->width;$new_h = ceil(($this->width/$src_w)*$src_h);}else{$new_h = $this->height;$new_w = ceil(($this->height/$src_h)*$src_w);} */$new_h = $this->height;$new_w = ceil(($this->height/$src_h)*$src_w);$paint = imagecreatetruecolor($new_w, $new_h);imagecopyresampled($paint, $src, 0,0,0,0, $new_w, $new_h, $src_w, $src_h);//在原图上保存缩略图switch($this->fileType){case 'jpg':case 'jpeg':$src = imagejpeg($paint, $this->path.'/'.$this->fname.'.'.$this->fileType);break;case 'gif':$src = imagegif($paint, $this->path.'/'.$this->fname.'.'.$this->fileType);break;case 'png':$src = imagepng($paint, $this->path.'/'.$this->fname.'.'.$this->fileType);break;}//释放资源imagedestroy($paint);sleep(2);unlink($this->img);//因为返回的是img链接资源,所以可以省略HEADER头部$this->noticeMsg="<img src=".$this->path.'/'.$this->fname.'.'.$this->fileType.">";$sources = $this->path.'/'.$this->fname.'.'.$this->fileType;$this->sql->setImage("$sources");}}?>

php图片上传并生成缩略图相关推荐

  1. php 上传图片并生成缩略图,php 图片上传并生成缩略图代码

    本代码的功能是把你要上传的图片保存到服务器,然后再把当前图重按比例生成一个小的缩略图哦. if($_FILES['image']['size']){ if($_FILES['image']['type ...

  2. php多图片上传封装类,php----图片上传封装类:单张,多张图片上传,生成缩略图...

    <?php /** * 功能: 单张,多张图片上传,生成缩略图 * Class ImgUpload */ class ImgUpload { private $file; //文件信息 priv ...

  3. C#上传视频生成缩略图

    注意:需要FFmpeg软件,用到ffmpeg.exe:FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频 ...

  4. node.js实现图片上传(包含缩略图)

    图片上传 使用multiparty插件实现上传 安装multiparty npm i --save multiparty 代码实现 const multiparty = require('multip ...

  5. PHP开发微信支付小微商户V3版本 图片上传、生成签名、平台证书获取、平台证书编号、敏感信息加密

    吐槽一下,看微信支付小微商户的开发文档头都大了,什么是平台证书.什么是商户API证书...... 好了废话不多说下面明确几个名词: 商户API证书:是由权威CA颁发,用于有关微信支付等操作API接口使 ...

  6. CGB2005 JT7-8(文件 图片上传 uuid生成文件名 静态代码块,反向代理,Nginx,Host文件,tomact集群实现项目发布 ,nginx负载均衡种类)

    注意事项 1.京淘文件上传 文件上传api 京淘图片上传 利用静态代码块赋值 图片上传优化(动态赋值) uuid去掉横线 2.反向代理机制(正向反向代理说明) nginx学习 nginx实现反向代理 ...

  7. 文件上传以及生成缩略图的代码

    简单的文件上传的代码 html页面的代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"&g ...

  8. 图片上传(加水印、缩略图、远程保存)的简单例子

    图片上传(加水印.缩略图.远程保存)的简单例子(应用于51aspx.com) 该源码下载地址:http://51aspx.com/CV/ImageUpload 今天看到xiongeee发的文章使用使用 ...

  9. php发表图片文章代码,最新PHP图片上传的一个例子的文章【延伸阅读】

    ThinkPHP+Uploadify图片上传示例 => Yii框架+CKEditor实现图片上传示例 => CodeIgniter使用类库做图片上传示例 => php+js实现异步图 ...

最新文章

  1. PMCAFF | 产品经理的招聘要求调研分析
  2. VTK:PolyData之AlignFrames
  3. HALCON示例程序color_simple.hdev在HSV空间筛选黄色线
  4. 在运行时更新代码(已Spring解密)
  5. 软硬计算机电缆的区别,电线也有软硬之分,两者有什么区别?
  6. 405 not allowed什么意思_clock是什么意思
  7. bp神经网络matlab代码_4层bp神经网络详细推导以及代码(矩阵化运算)
  8. matlab绘制均匀b样条曲线,MATLAB绘制B样条曲线
  9. 程序闪退崩溃的几种原因
  10. [渝粤教育] 同济大学 外科手术技能教学 参考 资料
  11. Mac 有线网络或WiFi网络共享成WiFiwifi的方法
  12. Spring 5.X+CXF 3.X 开发SOAP Web Service服务端实例
  13. itx 主板支持服务器内存,1200大洋的Z490 itx主板能干嘛?6核超5G,内存比一线,值得入手...
  14. 在win10更新的时候出现0x80240004错误代码怎么解决。
  15. 卧槽!百度网盘体验版流出,竟然不限速。速度6MB/s!(附下载链接)
  16. 自律是什么?就是对自己狠一点,再狠一点,然后你人生的层次就……
  17. python 笔记--同时输入两个数字
  18. 登山赛车破解无线金币实现原理分析
  19. 超好用的java反编译工具(Java Decompiler)
  20. 附晋级总决赛名单|创潜能破桎梏,为热爱“云”上夺金

热门文章

  1. 企业电子招标采购系统项目说明+开发类型+解决方案+功能描述+二次开发+spring cloud
  2. JAVA新闻稿件管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  3. StackEdit中文版:可以轻松上手的 Markdown 编辑器笔记利器
  4. nodejs开发指南中,microblog微博系统的开发相关
  5. 我从腾讯辞职去小公司做报表,工资却涨了50%,靠什么?
  6. 计算机去专业去马来读硕士,【马来西亚留学专业资讯】马来西亚留学热门专业资讯分析...
  7. 3D全景!这么牛!!
  8. 你们支持地摊在不影响交通情况下摆摊吗
  9. 关于中国传统养生思想
  10. Python爬虫实习笔记 | Week4 项目数据爬取与反思