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 相关文章推荐
example1.php
Oct 09 PHP
一个SQL管理员的web接口
Oct 09 PHP
用PHP的ob_start();控制您的浏览器cache!
Feb 14 PHP
php日历[测试通过]
Mar 27 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
PHPUnit安装及使用示例
Oct 29 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
PHP框架laravel的.env文件配置教程
Jun 07 PHP
PHP 的Opcache加速的使用方法
Dec 29 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 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 pear安装配置教程
2016/05/14 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
Ucren Virtual Desktop V2.0
2006/11/07 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
JavaScript中闭包之浅析解读(必看篇)
2016/08/25 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
JS中闭包的经典用法小结(2则示例)
2016/12/28 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
2017/08/06 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
layui 解决富文本框form表单提交为空的问题
2019/10/26 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Python+django实现简单的文件上传
2016/08/17 Python
Python常用算法学习基础教程
2017/04/13 Python
python使用pandas实现数据分割实例代码
2018/01/25 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
求职简历的自我评价
2014/01/31 职场文书
教师考核鉴定意见
2015/06/05 职场文书
市直属机关2016年主题党日活动总结
2016/04/05 职场文书
Python 视频画质增强
2022/04/28 Python