基于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 出现乱码和Sessions验证问题的解决方法!
Dec 06 PHP
PHP之COOKIE支持详解
Sep 20 PHP
关于PHP结束标签的使用细节探讨及联想
Mar 04 PHP
PHP静态调用非静态方法的应用分析
May 02 PHP
强烈声明: 不要使用(include/require)_once
Jun 06 PHP
PHP的基本常识小结
Jul 05 PHP
ajax返回值中有回车换行、空格的解决方法分享
Oct 24 PHP
PHP函数extension_loaded()用法实例
Jan 19 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
php pdo连接数据库操作示例
Nov 18 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
PHP Pipeline 实现中间件的示例代码
Apr 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
彻底杜绝PHP的session cookie错误
2009/08/09 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
php 使用GD库为页面增加水印示例代码
2014/03/24 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
手动下载Chrome并解决puppeteer无法使用问题
2018/11/12 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
jQuery+ajax实现文件上传功能
2020/12/22 jQuery
[01:43]深扒TI7聊天轮盘语音出处4
2017/05/11 DOTA
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
wxpython学习笔记(推荐查看)
2014/06/09 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
2016/02/19 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
浅谈Python中的继承
2020/06/19 Python
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
中学教师教育感言
2014/02/21 职场文书
商业融资计划书
2014/04/29 职场文书
生活小常识广播稿
2014/09/16 职场文书
员工评语范文
2014/12/31 职场文书
校运会新闻稿
2015/07/17 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
干部理论学习心得体会
2016/01/21 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python