<?php /** * 功能: 单张,多张图片上传,生成缩略图 * Class ImgUpload */ class ImgUpload { private $file; //文件信息 private $fileList; //文件列表 private $inputName; //标签名称 private $uploadPath; //上传路径 private $fileMaxSize; //最大尺寸 private $uploadFiles; //上传文件 //允许上传的文件类型 private $allowExt = array('bmp', 'jpg', 'jpeg', 'png', 'gif'); /** *@param $inputName input标签的name属性 *@param $uploadPath 文件上传路径 */ public function __construct($inputName, $uploadPath) { $this->inputName = $inputName; $this->uploadPath = $uploadPath; $this->fileList = array(); $this->file = $file = array( 'name' => null, 'type' => null, 'tmp_name' => null, 'size' => null, 'errno' => null, 'error' => null ); } /** * 设置允许上传的图片后缀格式 *@param $allowExt 文件后缀数组 */ public function setAllowExt($allowExt) { if (is_array($allowExt)) { $this->allowExt = $allowExt; } else { $this->allowExt = array($allowExt); } } /** * 设置允许上传的图片规格 *@param $fileMaxSize 最大文件尺寸 */ public function setMaxSize($fileMaxSize) { $this->fileMaxSize = $fileMaxSize; } /** * 获取上传成功的文件数组 *@return mixed */ public function getUploadFiles() { return $this->uploadFiles; } /** * 得到文件上传的错误信息 *@return array|mixed */ public function getErrorMsg() { if (count($this->fileList) == 0) { return $this->file['error']; } else { $errArr = array(); foreach ($this->fileList as $item) { array_push($errArr, $item['error']); } return $errArr; } } /** * 初始化文件参数 *@param $isList */ private function initFile($isList) { if ($isList) { foreach ($_FILES[$this->inputName] as $key => $item) { for ($i = 0; $i < count($item); $i++) { if ($key == 'error') { $this-> fileList[$i]['error'] = null; $this->fileList[$i]['errno'] = $item[$i]; } else { $this->fileList[$i][$key] = $item[$i]; } } } } else { $this->file['name'] = $_FILES[$this->inputName]['name']; $this->file['type'] = $_FILES[$this->inputName]['type']; $this->file['tmp_name'] = $_FILES[$this->inputName]['tmp_name']; $this->file['size'] = $_FILES[$this->inputName]['size']; $this->file['errno'] = $_FILES[$this->inputName]['error']; } } /** * 上传错误检查 *@param $errno *@return null|string */ private function errorCheck($errno) { switch ($errno) { case UPLOAD_ERR_OK: return null; case UPLOAD_ERR_INI_SIZE: return '文件尺寸超过服务器限制'; case UPLOAD_ERR_FORM_SIZE: return '文件尺寸超过表单限制'; case UPLOAD_ERR_PARTIAL: return '只有部分文件被上传'; case UPLOAD_ERR_NO_FILE: return '没有文件被上传'; case UPLOAD_ERR_NO_TMP_DIR: return '找不到临时文件夹'; case UPLOAD_ERR_CANT_WRITE: return '文件写入失败'; case UPLOAD_ERR_EXTENSION: return '上传被扩展程序中断'; } } /** * 上传文件校验 *@param $file *@throws Exception */ private function fileCheck($file) { //图片上传过程是否顺利 if ($file['errno'] != 0) { $error = $this->errorCheck($file['errno']); throw new Exception($error); } //图片尺寸是否符合要求 if (!empty($this->fileMaxSize) && $file['size'] > $this->fileMaxSize) { throw new Exception('文件尺寸超过' . ($this->fileMaxSize / 1024) . 'KB'); } //图片类型是否符合要求 $ext = pathinfo($file['name'], PATHINFO_EXTENSION); if (!in_array($ext, $this->allowExt)) { throw new Exception('不符合要求的文件类型'); } //图片上传方式是否为HTTP if (!is_uploaded_file($file['tmp_name'])) { throw new Exception('文件不是通过HTTP方式上传的'); } //图片是否可以读取 if (!getimagesize($file['tmp_name'])) { throw new Exception('图片文件损坏'); } //检查上传路径是否存在 if (!file_exists($this->uploadPath)) { mkdir($this->uploadPath, null, true); } } /** * 单文件上传,成功返回true *@return bool */ public function acceptSingleFile() { $this->initFile(false); try { $this->fileCheck($this->file); // $md_name = md5(uniqid(microtime(true), true)) . '.' . pathinfo($this->file['name'], PATHINFO_EXTENSION); // 简单设置图片名 $md_name = uniqid() . '.' . pathinfo($this->file['name'], PATHINFO_EXTENSION); if (move_uploaded_file($this->file['tmp_name'], $this->uploadPath . $md_name)) { $this->uploadFiles = array($this->uploadPath . $md_name); } else { throw new Exception('文件上传失败'); } } catch (Exception $e) { $this->file['error'] = $e->getMessage(); } finally { if (file_exists($this->file['tmp_name'])) { unlink($this->file['tmp_name']); } } return empty($this->file['error']) ? true : false; } /** * 多文件上传,全部成功返回true *@return bool */ public function acceptMultiFile() { $this->initFile(true); $this->uploadFiles = array(); for ($i = 0; $i < count($this-> fileList); $i++) { try { $this->fileCheck($this->fileList[$i]); $ext = pathinfo($this->fileList[$i]['name'], PATHINFO_EXTENSION); // $md_name = md5(uniqid(microtime(true), true)) . '.' . $ext; // 简单设置图片名 $md_name = uniqid() . '.' . $ext; if (move_uploaded_file($this->fileList[$i]['tmp_name'], $this->uploadPath . $md_name)) { array_push($this->uploadFiles, $this->uploadPath . $md_name); } else { throw new Exception('文件上传失败'); } } catch (Exception $e) { $this->fileList[$i]['error'] = $e->getMessage(); } finally { if (file_exists($this->fileList[$i]['tmp_name'])) { unlink($this->fileList[$i]['tmp_name']); } } } foreach ($this->fileList as $item) { if (!empty($item['error'])) { return false; } } return true; } /** * 生成缩略图: *@param $picName 图片名. 为上传后图片的完整路径. 获取: $imgUpload->getUploadFiles()[0] *@param $max_w 缩略图宽度 *@param $max_h 缩略图高度 *@param $pre 缩缩略图前缀 *@return bool */ public function imgUpdateSize($picName, $max_w=100, $max_h=100, $pre='_s'){ #1 获取图片的基本信息 $info = getimagesize($picName); $w = $info[0]; $h = $info[1]; #2 获取图片的类型 switch ($info[2]){ case 1: #gif $im = imagecreatefromgif($picName); break; case 2: #jpeg $im = imagecreatefromjpeg($picName); break; case 3: #png $im = imagecreatefrompng($picName); break; default : die('image style error!'); } #3 计算缩放比例 if(($max_w/$w) > ($max_h/$h)){ $b = $max_h/$h; }else{ $b = $max_w/$w; } #4 计算缩放后的尺寸 $nw = floor($w*$b); $nh = floor($h*$b); #5 创建一个新的图像源 -目标画布 $nim = imagecreatetruecolor($nw, $nh); # 等比例缩放 imagecopyresampled($nim, $im, 0, 0, 0, 0, $nw, $nh, $w, $h); #6 输出图片 -按源图像的类型输出 $picInfo = pathinfo($picName); #解析源图像的名子与路径信息 $new_picName = $picInfo['dirname'].'/'.$picInfo['filename'] .$pre.'.'.$picInfo['extension']; #拼装新图像名 switch ($info[2]){ case 1: #gif imagejpeg($nim, $new_picName); break; case 2: #jpeg imagejpeg($nim, $new_picName); break; case 3: #png imagepng($nim, $new_picName); break; default : die('image style error!'); } #7 释放图片资源 imagedestroy($im); imagedestroy($nim); return $new_picName; } }

php多图片上传封装类,php----图片上传封装类:单张,多张图片上传,生成缩略图...相关推荐

  1. php mysql上传多张图片_PHP实现一次性多张图片上传功能

    原标题:PHP实现一次性多张图片上传功能 最近遇到一个需求,就是多张图片上传,按住Ctrl键能选择多张图片一次性上传,上传成功后数据库保存图片的路径及图片原来的文件名.该功能一般在比较成熟的内容编辑器 ...

  2. python获取图片像素点颜色_Python获取图片位置像素色值及判断色值是否存在

    本文背景: 公司项目的广告系统有个功能,给图片模板打指定的颜色值点,根据需要拼合的图片数量,打点数量也不同.设计说他弄好了,运营上传打点后的模板图片时,获取不到打点的位置坐标.于是找研发看是怎么回事, ...

  3. Scrapy框架下载图片(站酷网下载图片)

    Scrapy框架下载图片 下载图片 Scrapy框架下载文件(包括图片有自己一套解决方案,比我们直接使用urlretriever更加有优势) 避免重新下载最近下载过的文件 可以方便的指定文件存储路径 ...

  4. ueditor php 附件,ueditor单独调用上传附件和图片的功能

    第一步, 引入文件 第二步 html元素 调用的页面: 上传图片 上传文件 第三步 编写js代码 var _editor; $(function() { //重新实例化一个编辑器,防止在上面的edit ...

  5. android h5 多图上传源码,JS移动端/H5同时选择多张图片上传并使用canvas压缩图片...

    最近在做一个H5的项目,里边涉及到拍照上传图片的功能以及识别图片的功能,这里对识别图片的功能不做赘述,不属本文范畴.我在做完并上线项目后,同事跟我提了一个要求是可不可以同时选择多张图片上传,我做的时候 ...

  6. php 图片 投稿 源码,php图片上传,审核,显示源码(转载)

    php图片上传,审核,显示源码(转载) 最近想为http://gif.nbqq.net,加一个网友可以自主上传的页面,然后我审核.所以百度了下源码先.下午好好研究下. 首先来看下上传部分的表单代码: ...

  7. 安卓okhttp上传jason和图片_微信图片总是「已过期或被清理」?简单 3 招,可摆脱烦恼...

    微信图片总是「已过期或被清理」?简单 3 招可摆脱烦恼 除了文字.表格.PPT 和 PDF,大家日常办公中也常常和「图片文件」打交道. 于是,我们总碰到这样的问题: 1)图片文件太大,在线传输耗时,甲 ...

  8. html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器

    原文:html5 图片上传,支持图片预览.压缩.及进度显示,兼容IE6+及标准浏览器 以前写过上传组件,见 打造 html5 文件上传组件,实现进度显示及拖拽上传,兼容IE6+及其它标准浏览器,对付一 ...

  9. vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决

    vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决 参考文章: (1)vue-quill-editor上传内容由于图片是base64的导致字符太长的问题解决 (2) ...

最新文章

  1. 1小时学会:最简单的iOS直播推流(二)代码架构概述
  2. CYQ学习主要摘要4
  3. 【错误记录】Manifest 清单文件报错 ( ..required to specify an explicit value for `android:exported` when the .. )
  4. 数据中心新认证出现,UPTIME面临挑战
  5. python文件解除占用_如何使用Python解锁锁定的文件和文件夹(mac)
  6. CSU 1259 bfs找最短路
  7. bzoj 1227 [SDOI2009]虔诚的墓主人
  8. 面试题目整理--逻辑
  9. 实战突击:PHP项目开发案例整合(第2版)
  10. java控制台打印输出改个颜色吧
  11. Hessian Matrix
  12. nginx配置实战1----配置虚拟主机
  13. 【渝粤题库】陕西师范大学800008 综合自然地理
  14. Oracle查询优化改写技巧与案例总结三
  15. Windows自动关机设置
  16. (转)用Scintilla让程序支持语法高亮
  17. 云计算以及虚拟化的简单介绍
  18. 马克飞象 Markdown 使用和学习
  19. APP安装与卸载测试点
  20. 0ra-12170 tns 连接超时

热门文章

  1. SQLSERVER2005 收缩日志
  2. 设计模式学习笔记1——类与类之间的关系
  3. 《数据结构C语言版》——线性表详解,你一定能够看得懂学得会的宝典
  4. Java基础——Arrays工具类的使用
  5. 15日直播预告丨SQL条件等价改写秘笈(主讲人:怀晓明)
  6. 如何将DB2数据库转换成Oracle数据库,这一篇告诉你
  7. 工具丨超好用的免费AWR分析工具
  8. 活动丨4场直播华丽丽来袭,快来参与
  9. 带你掌握二进制SCA检测工具的短板及应对措施
  10. 鸿蒙轻内核源码分析:虚实映射