基于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 相关文章推荐
JS中encodeURIComponent函数用php解码的代码
Mar 01 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
Dec 15 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 PHP
php实现图片上传并进行替换操作
Mar 15 PHP
eclipse php wamp配置教程
Jun 30 PHP
php简单实现文件或图片强制下载的方法
Dec 06 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
laravel5.4生成验证码的实例讲解
Aug 05 PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 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
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
2016/06/20 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
2018/01/27 PHP
详解json在php中的应用
2018/09/30 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
深入理解JQuery keyUp和keyDown的区别
2013/12/12 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
javascript实现在网页任意处点左键弹出隐藏菜单的方法
2015/05/13 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
jquery实现表格隔行换色效果
2015/11/19 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
2015/12/22 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
JS 仿支付宝input文本输入框放大组件的实例
2017/11/14 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
详解Webpack loader 之 file-loader
2018/11/07 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
Python GAE、Django导出Excel的方法
2008/11/24 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
python二维图制作的实例代码
2020/12/03 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
香港通票:Hong Kong Pass
2019/02/26 全球购物
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
高中学生会竞选演讲稿
2014/08/25 职场文书
中学教师师德师风承诺书
2015/04/28 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python
SqlServer数据库远程连接案例教程
2021/07/15 SQL Server
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
HTTP中的Content-type详解
2022/01/18 HTML / CSS