基于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 相关文章推荐
基于数据库的在线人数,日访问量等统计
Oct 09 PHP
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
php win下Socket方式发邮件类
Aug 21 PHP
PHP原理之异常机制深入分析
Aug 08 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
php超快高效率统计大文件行数
Jul 05 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
Laravel框架查询构造器简单示例
May 08 PHP
PHP8.0新功能之Match表达式的使用
Jul 19 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采集时被封ip的解决方法
2010/08/29 PHP
php session的锁和并发
2016/01/22 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
PHP目录操作实例总结
2016/09/27 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
JavaScript Archive Network 集合
2007/05/12 Javascript
一些不错的js函数ajax
2008/08/20 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
js实现的下拉框二级联动效果
2016/04/30 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
Python类的多重继承问题深入分析
2014/11/09 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
html5拖曳操作 HTML5实现网页元素的拖放操作
2013/01/02 HTML / CSS
企划经理的岗位职责
2013/11/17 职场文书
致铅球运动员广播稿精选
2014/01/12 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
html css3不拉伸图片显示效果
2021/06/07 HTML / CSS
python字符串的一些常见实用操作
2022/04/06 Python
实战Python爬虫爬取酷我音乐
2022/04/11 Python