基于PHP服务端图片生成缩略图的方法详解


Posted in PHP onJune 20, 2013
<?php
//定义缩略图片尺寸
$picSize = array(
              '100_100'=> 1,
              '200_100'=> 1
           );
$imagePath = "../image/";
function parseUrl($url){
   preg_match("/(?P<name>[\w\d]+)_w(?P<width>\d+)_h(?P<height>\d+)\.(?P<ext>\w+)/",$url,$match);
   return $match;
}
$urlArr = explode("/",$_SERVER['REQUEST_URI']);
$imgName = $urlArr[count($urlArr)-1];
$picInfo = parseUrl($imgName);
//错误尺寸
if(empty($picInfo['width']) || empty($picInfo['height']) ||
!array_key_exists($picInfo['width'].'_'.$picInfo['height'],$picSize)) die('不存在该尺寸图片');
$originalPic = $imagePath.$picInfo['name'].'/'.$picInfo['name'].'.'.$picInfo['ext'];
//原始图不存在
if(!file_exists($originalPic)) die("图片不存在!");
/**
 *等比例压缩图片
 */
switch($picInfo['ext']){
   case 'jpg':
      $orgImg = ImageCreateFromJpeg($originalPic);
      break;
   default: 
      break;
}
$owidth  =  ImageSX($orgImg); //原始尺寸
$oheight =  ImageSY($orgImg);
$tW = $picInfo['width'];
$tH = $picInfo['height'];
//获取缩略图尺寸
if($owidth/$oheight > $tW/$tH){
    $tH = intval($tW * $oheight/$owidth);
}else{
     $tW = intval($tH * $owidth/$oheight);
}
//生成背景图
$new_img = ImageCreateTrueColor($picInfo['width'], $picInfo['height']);
$bgColor = imagecolorallocate($new_img,255,255,255);
if (!@imagefilledrectangle($new_img, 0, 0, $picInfo['width']-1, $picInfo['height']-1, $bgColor)) {
    echo "无法创建背景图";  //@todo记录日志
    exit(0);
}
if (!@imagecopyresampled($new_img, $orgImg, ($picInfo['width']-$tW)/2, ($picInfo['height']-$tH)/2, 0, 0, $tW, $tH, $owidth, $oheight)) {
    echo "生成图片失败";
    exit(0);
}
//生成图片
ob_start();
imagejpeg($new_img);
$_newImg = ob_get_contents();
ob_end_clean();
file_put_contents($imagePath.$picInfo['name']."/".$imgName, $_newImg);
header("Content-type:image/jpeg; charset=utf-8");
imagejpeg($new_img);
?>

使用时候绑定apache conf 的 documentError 404 的handler 为此文件。。
PHP 相关文章推荐
mysql limit查询优化分析
Nov 12 PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
PHP输出一个等腰三角形的方法
May 12 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 PHP
php使用curl并发减少后端访问时间的方法分析
May 12 PHP
基于CI框架的微信网页授权库示例
Nov 25 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
php实现生成code128条形码的方法详解
Jul 19 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 PHP
解析thinkphp中的导入文件标签
Jun 20 #PHP
解析thinkphp import 文件内容变量失效的问题
Jun 20 #PHP
解析用PHP实现var_export的详细介绍
Jun 20 #PHP
PHP 实现explort() 功能的详解
Jun 20 #PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 #PHP
使用Linux五年积累的一些经验技巧
Jun 20 #PHP
解析PHP高效率写法(详解原因)
Jun 20 #PHP
You might like
社区(php&amp;&amp;mysql)五
2006/10/09 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP设计模式之适配器模式定义与用法详解
2018/04/03 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
js模拟滚动条(横向竖向)
2013/02/22 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
javascript实现类似超链接的效果
2014/12/26 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
2015/12/02 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
浅谈js的ajax的异步和同步请求的问题
2016/10/07 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
Python 备份程序代码实现
2017/03/06 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
PyCharm配置anaconda环境的步骤详解
2020/07/31 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
科室工作个人总结的自我评价
2013/10/29 职场文书
医药代表个人的求职信分享
2013/12/08 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
个人考核材料
2014/05/15 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python
MySQL分区表实现按月份归类
2021/11/01 MySQL