基于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 防止单引号,双引号在接受页面转义
Jul 10 PHP
PHP Header用于页面跳转要注意的几个问题总结
Oct 03 PHP
php站内搜索并高亮显示关键字的实现代码
Dec 29 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
PHP+MySQL修改记录的方法
Jan 21 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
thinkphp实现分页显示功能
Dec 03 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 PHP
PDO::exec讲解
Jan 28 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 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获取网页内容方法总结
2008/12/04 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
php中常用的预定义变量小结
2012/05/09 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
php中Array2xml类实现数组转化成XML实例
2014/12/08 PHP
PHP实现事件机制的方法
2015/07/10 PHP
javascript 动态参数判空操作
2008/12/22 Javascript
让div层随鼠标移动的实现代码 ie ff
2009/12/18 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
2011/04/14 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
javascript实现标签切换代码示例
2016/05/22 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
jquery获取链接地址和跳转详解(推荐)
2017/08/15 jQuery
浅谈让你的代码更简短,更整洁,更易读的ES6小技巧
2018/10/25 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
python和bash统计CPU利用率的方法
2015/07/10 Python
python实现维吉尼亚算法
2019/03/20 Python
Python Flask框架扩展操作示例
2019/05/03 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
教育技术职业规划范文
2014/03/04 职场文书
技术入股合作协议书
2014/10/07 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
Python import模块的缓存问题解决方案
2021/06/02 Python
Python中npy和mat文件的保存与读取
2022/04/24 Python