基于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 相关文章推荐
9个PHP开发常用功能函数小结
Jul 15 PHP
header中Content-Disposition的作用与使用方法
Jun 13 PHP
php读取EXCEL文件 php excelreader读取excel文件
Dec 06 PHP
PHP 读取Postgresql中的数组
Apr 14 PHP
php之readdir函数用法实例
Nov 13 PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 PHP
php批量修改表结构实例
May 24 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP的PDO错误与错误处理
Jan 27 PHP
PHP中遍历数组的三种常用方法实例分析
Jun 24 PHP
使用laravel的migrate创建数据表的方法
Sep 30 PHP
一文搞懂php的垃圾回收机制
Jun 18 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中反射的应用
2013/06/18 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
php上传中文文件名乱码问题处理方案
2015/02/03 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
PHP实现的函数重载功能示例
2018/08/03 PHP
php基于 swoole 实现的异步处理任务功能示例
2019/08/13 PHP
js 对象是否存在判断
2009/07/15 Javascript
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
javascript 在网页中的运用(asp.net)
2009/11/23 Javascript
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
Python中私有属性的定义方式
2020/03/05 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
Python退出时强制运行一段代码的实现方法
2020/04/29 Python
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
教师职称自我鉴定
2014/02/12 职场文书
单位实习鉴定评语
2015/01/04 职场文书
2019军训心得体会
2019/06/27 职场文书
Python基于百度API识别并提取图片中文字
2021/06/27 Python
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript