php实现上传图片生成缩略图示例


Posted in PHP onApril 13, 2014

功能很简单,代码中有注释,直接给大家上代码了

<?php
/**
 * 上传图片生成缩略图
 * 
 * 需要GD2库的支持
 * 
 * 初始化时需要参数new thumbnails('需要缩略的图片的原始地址','缩略图的宽度','缩略图的高度','(可选参数)缩略图的保存路径');
 * 如果最后一个参数不指定,那么缩略图就默认保存在原始图片的所在目录里的small文件夹里,
 * 如果不存在small文件夹,则会自动创建small文件夹
 * 
 * 初始化之后需要调用方法produce创建缩略图
 * $thumbnails = new thumbnails(''....);
 * $thumbnails->produce();
 * 
 * 其中可以获取原始图片的相关信息,宽度、高度、和图片mime
 * 
 * $thumbnails->getImageWidth(); //int 图片宽度
 * $thumbnails->getImageHeight(); // int 图片高度
 * $thumbnails->getImageMime(); // string 图片的mime
 * 
 * $thumbnails->trueSize(); //array 这是一个包含图片等比例缩略之后的宽度和高度值的数组
 * $size = array('width'=>'','height'=>'');
 * 获取图片等比缩略之后的宽度和高度
 * $size['width']//等比缩略图的宽度
 * $size['height']//等比缩略图的高度
 * 
 */
class thumbnails{ private $imgSrc; //图片的路径
 private $saveSrc; //图片的保存路径,默认为空
 private $canvasWidth; //画布的宽度
 private $canvasHeight; //画布的高度
 private $im; //画布资源
 private $dm; //复制图片返回的资源
 /**
  * 初始化类,加载相关设置
  * 
  * @param $imgSrc 需要缩略的图片的路径
  * @param $canvasWidth 缩略图的宽度
  * @param $canvasHeight 缩略图的高度
  */
 public function __construct($imgSrc,$canvasWidth,$canvasHeight,$saveSrc=null)
 {
  $this->imgSrc = $imgSrc;
  $this->canvasWidth = $canvasWidth;
  $this->canvasHeight = $canvasHeight;
  $this->saveSrc = $saveSrc;
 }
 /**
  * 生成缩略图
  */
 public function produce()
 {
  $this->createCanvas();
  $this->judgeImage();
  $this->copyImage();
  $this->headerImage(); 
 }
 /**
  * 获取载入图片的信息
  * 
  * 包含长度、宽度、图片类型
  * 
  * @return array 包含图片长度、宽度、mime的数组
  */
 private function getImageInfo()
 {
  return getimagesize($this->imgSrc);
 }
 /**
  * 获取图片的长度
  * 
  * @return int 图片的宽度
  */
 public function getImageWidth()
 {
  $imageInfo = $this->getImageInfo();
  return $imageInfo['0'];
 }
 /**
  * 获取图片高度
  * 
  * @return int 图片的高度
  */
 public function getImageHeight()
 {
  $imageInfo = $this->getImageInfo();
  return $imageInfo['1'];
 }
 /**
  * 获取图片的类型
  * 
  * @return 图片的mime值
  */
 public function getImageMime()
 {
  $imageInfo = $this->getImageInfo();
  return $imageInfo['mime'];
 }
 /**
  * 创建画布
  * 
  * 同时将创建的画布资源放入属性$this->im中
  */
 private function createCanvas()
 {
  $size = $this->trueSize();
  $this->im = imagecreatetruecolor($size['width'],$size['height']);
 }
 /**
  * 判断图片的mime值,确定使用的函数
  * 
  * 同时将创建的图片资源放入$this->dm中
  */
 private function judgeImage()
 {
  $mime = $this->getImageMime();
  switch ($mime)
  {
   case 'image/png':$dm = imagecreatefrompng($this->imgSrc);
   break;
   case 'image/gif':$dm = imagecreatefromgif($this->imgSrc);
   break;
   case 'image/jpg':$dm = imagecreatefromjpeg($this->imgSrc);
   break;
   case 'image/jpeg':$dm = imagecreatefromgjpeg($this->imgSrc);
   break;
  }
  $this->dm = $dm;
 }
 /**
  * 判断图片缩略后的宽度和高度
  * 
  * 此宽度和高度也作为画布的尺寸
  *
  * @return array 图片经过等比例缩略之后的尺寸
  */
 public function trueSize()
 {
  $proportionW = $this->getImageWidth() / $this->canvasWidth;
  $proportionH = $this->getImageHeight() / $this->canvasHeight;
  if( ($this->getImageWidth() < $this->canvasWidth) && ($this->getImageHeight() < $this->canvasHeight) )
  {
   $trueSize = array('width'=>$this->getImageWidth(),'height'=>$this->getImageHeight());
  }
  elseif($proportionW >= $proportionH)
  {
   $trueSize = array('width'=>$this->canvasWidth,'height'=>$this->getImageHeight() / $proportionW);
  }
  else
  {
   $trueSize = array('width'=>$this->getImageWidth() / $proportionH,'height'=>$this->canvasHeight);
  }
  return $trueSize;
 }
 /**
  * 将图片复制到新的画布上面
  * 
  * 图片会被等比例的缩放,不会变形
  */
 private function copyImage()
 {
  $size = $this->trueSize();
  imagecopyresized($this->im, $this->dm , 0 , 0 , 0 , 0 , $size['width'] , $size['height'] , $this->getImageWidth() , $this->getImageheight());
 }
 /**
  * 将图片输出
  * 
  * 图片的名称默认和原图片名称相同
  * 
  * 路径为大图片当前目录下的small目录内
  * 
  * 如果small目录不存在,则会自动创建
  */
 public function headerImage()
 {
  $position = strrpos($this->imgSrc,'/');
  $imageName = substr($this->imgSrc,($position + 1));
  if($this->saveSrc)
  {
   $imageFlode = $this->saveSrc.'/';
  }
  else 
  {
   $imageFlode = substr($this->imgSrc,0,$position).'/small/';
  }
  if(!file_exists($imageFlode))
  {
   mkdir($imageFlode);
  }
  $saveSrc = $imageFlode.$imageName;
  imagejpeg($this->im,$saveSrc);
 } 
}
PHP 相关文章推荐
php 常用字符串函数总结
Mar 15 PHP
PHP中=赋值操作符对不同数据类型的不同行为
Jan 02 PHP
php笔记之:文章中图片处理的使用
Apr 26 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
php实现Linux服务器木马排查及加固功能
Dec 29 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
May 17 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
PHP实现的只保留字符串首尾字符功能示例【隐藏部分字符串】
Mar 11 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
Oct 28 PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 #PHP
PHP header()函数常用方法总结
Apr 11 #PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 #PHP
PHP获取网页标题的3种实现方法代码实例
Apr 11 #PHP
PHP动态生成javascript文件的2个例子
Apr 11 #PHP
php实现数组筛选奇数和偶数示例
Apr 11 #PHP
php求正负数数组中连续元素最大值示例
Apr 11 #PHP
You might like
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
2015/01/13 PHP
php适配器模式简单应用示例
2019/10/23 PHP
CL vs ForZe BO5 第二场 2.13
2021/03/10 DOTA
JavaScript入门教程 Cookies
2009/01/31 Javascript
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
2012/01/15 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
Node.js实现文件上传
2016/07/05 Javascript
JavaScript中的对象继承关系
2016/08/01 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
2017/10/11 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
简单实现python收发邮件功能
2018/01/05 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
Python操作Excel插入删除行的方法
2018/12/10 Python
django之自定义软删除Model的方法
2019/08/14 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
初中军训感想300字
2014/03/05 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
保密协议书范本
2014/04/22 职场文书
大学生村官个人总结
2015/02/15 职场文书
2015学生会文艺部工作总结
2015/04/03 职场文书