基于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面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
PHPThumb PHP 图片缩略图库
Mar 11 PHP
PHP命名空间(Namespace)的使用详解
May 04 PHP
Chrome Web App开发小结
Sep 04 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
PHP实现动态web服务器方法
Jul 29 PHP
PHP+ajax分页实例简析
Dec 07 PHP
php输出图像的方法实例分析
Feb 16 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
完美解决PHP中文乱码
2009/11/26 PHP
php数组删除元素示例
2014/03/21 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
网易JS面试题与Javascript词法作用域说明
2010/11/09 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
javascript实现跳转菜单的具体方法
2013/07/05 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
关于vue.js弹窗组件的知识点总结
2016/09/11 Javascript
浅谈Angular中ngModel的$render
2016/10/24 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
jQuery.cookie.js使用方法及相关参数解释
2017/03/06 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
Python实现设置windows桌面壁纸代码分享
2015/03/28 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
Python中static相关知识小结
2018/01/02 Python
python实现关键词提取的示例讲解
2018/04/28 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
Python如何发送与接收大型数组
2020/08/07 Python
高中生毕业自我鉴定范文
2013/12/22 职场文书
考试不及格检讨书
2014/01/09 职场文书
《陋室铭》教学反思
2014/02/26 职场文书
2014庆六一活动方案
2014/03/02 职场文书
保护环境标语
2014/06/09 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
岳庙导游词
2015/02/04 职场文书
退休教师追悼词
2015/06/23 职场文书
导游词之镇江焦山
2019/11/21 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python