基于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 相关文章推荐
PHP STRING 陷阱原理说明
Jul 24 PHP
PHP防盗链代码实例
Aug 27 PHP
PHP链接MySQL的常用扩展函数
Oct 23 PHP
使用PHP生成PDF方法详解
Jan 23 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
php统计数组元素个数的方法
Jul 02 PHP
CodeIgniter钩子用法实例详解
Jan 20 PHP
POST一个JSON格式的数据给Restful服务实例详解
Apr 07 PHP
PHP实现根据密码长度显示安全条
Jul 04 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
解决php扩展安装不生效问题
Oct 25 PHP
关于PHP求解三数之和问题详析
Nov 09 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有序表查找之插值查找算法示例
2018/02/10 PHP
js过滤数组重复元素的方法
2010/09/05 Javascript
javascript中删除指定数组中指定的元素的代码
2011/02/12 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
jqueryUI里拖拽排序示例分析
2015/02/26 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
js获取Get值的方法
2016/09/29 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
解决vue组件销毁之后计时器继续执行的问题
2020/07/21 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
浅谈function(函数)中的动态参数
2017/04/30 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
python3利用tcp实现文件夹远程传输
2018/07/28 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
django模板结构优化的方法
2019/02/28 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
Python实现随机取一个矩阵数组的某几行
2019/11/26 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
大二法英学生职业生涯规划范文
2014/02/27 职场文书
环保建议书作文
2014/03/12 职场文书
分居协议书范本
2014/11/03 职场文书
我的生日感言
2015/08/03 职场文书