php实现根据url自动生成缩略图的方法


Posted in PHP onSeptember 23, 2014

本文实例讲述了php实现根据url自动生成缩略图的方法,是非常实用的功能。分享给大家供大家参考。具体方法如下:

原理:设置apache rewrite ,当图片不存在时,调用php创建图片。

例如:

原图路径为:http://localhost/upload/news/2013/07/21/1.jpg
缩略图路径为:http://localhost/supload/news/2013/07/21/1.jpg

当访问 http://localhost/supload/news/2013/07/21/1.jpg 时,如图片存在,则显示图片。否则,调用createthumb.php生成图片。

目录结构如下:

www/PicThumb.class.php
www/ThumbConfig.php
www/upload/news/2013/07/21/1.jpg
www/upload/article/2013/07/21/2.jpg
www/supload/.htaccess
www/supload/watermark.png
www/supload/createthumb.php

http://localhost/ 指向 www目录

PicThumb.class.php 用法请查看这里:https://3water.com/article/55530.htm

需要开启apache rewrite:

sudo a2enmod rewrite

.htaccess文件如下:

<IfModule mod_rewrite.c> 
RewriteEngine On 
 
# '-s' (is regular file, with size) 
# '-l' (is symbolic link) 
# '-d' (is directory) 
# 'ornext|OR' (or next condition) 
# 'nocase|NC' (no case) 
# 'last|L' (last rule) 
 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ createthumb.php?path=%{REQUEST_URI} [NC,L] 
 
</IfModule>

createthumb.php文件如下:

<?php
define('WWW_PATH', dirname(dirname(__FILE__))); // 站点www目录 
 
require(WWW_PATH.'/PicThumb.class.php'); // include PicThumb.class.php 
require(WWW_PATH.'/ThumbConfig.php');  // include ThumbConfig.php 
 
$logfile = WWW_PATH.'/createthumb.log'; // 日志文件 
$source_path = WWW_PATH.'/upload/';   // 原路径 
$dest_path = WWW_PATH.'/supload/';    // 目标路径 
 
$path = isset($_GET['path'])? $_GET['path'] : ''; // 访问的图片URL 
 
// 检查path 
if(!$path){ 
  exit(); 
} 
 
// 获取图片URI 
$relative_url = str_replace($dest_path, '', WWW_PATH.$path); 
 
// 获取type 
$type = substr($relative_url, 0, strpos($relative_url, '/')); 
 
// 获取config 
$config = isset($thumb_config[$type])? $thumb_config[$type] : ''; 
 
// 检查config 
if(!$config || !isset($config['fromdir'])){ 
  exit(); 
} 
 
// 原图文件 
$source = str_replace('/'.$type.'/', '/'.$config['fromdir'].'/', $source_path.$relative_url); 
 
// 目标文件  
$dest = $dest_path.$relative_url; 
 
// 创建缩略图 
$obj = new PicThumb($logfile); 
$obj->set_config($config); 
if($obj->create_thumb($source, $dest)){ 
  ob_clean(); 
  header('content-type:'.mime_content_type($dest)); 
  exit(file_get_contents($dest)); 
} 
 
?>

ThumbConfig.php文件如下:

<?php 
 
$thumb_config = array( 
 
  'news' => array( 
    'fromdir' => 'news', // 来源目录 
    'type' => 'fit', 
    'width' => 100, 
    'height' => 100, 
    'bgcolor' => '#FF0000' 
  ), 
 
  'news_1' => array( 
    'fromdir' => 'news', 
    'type' => 'fit', 
    'width' => 200, 
    'height' => 200, 
    'bgcolor' => '#FFFF00' 
  ), 
 
  'article' => array( 
    'fromdir' => 'article', 
    'type' => 'crop', 
    'width' => 250, 
    'height' => 250, 
    'watermark' => WWW_PATH.'/supload/watermark.png' 
  ) 
 
); 
 
?>

访问这三个路径后会按config自动生成缩略图 
http://localhost/supload/news/2013/07/21/1.jpg 
http://localhost/supload/news_1/2013/07/21/1.jpg 
http://localhost/supload/article/2013/07/21/2.jpg 

本文所述实例完整代码点击此处本站下载。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
php IP及IP段进行访问限制的代码
Dec 17 PHP
支持数组的ADDSLASHES的php函数
Feb 16 PHP
php网站来路获取代码(针对搜索引擎)
Jun 08 PHP
PHP计划任务、定时执行任务的实现代码
Apr 23 PHP
php调用mysql数据 dbclass类
May 07 PHP
PHP错误Cannot use object of type stdClass as array in错误的解决办法
Jun 12 PHP
Yii框架组件和事件行为管理详解
May 20 PHP
PHP中session跨子域的三种实现方法
Jul 25 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
PHP生成加减算法方式的验证码实例
Mar 12 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 #PHP
PHP图片库imagemagick安装方法
Sep 23 #PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 #PHP
php实现的支持断点续传的文件下载类
Sep 23 #PHP
php实现的click captcha点击验证码类实例
Sep 23 #PHP
PHP实现自动登入google play下载app report的方法
Sep 23 #PHP
PHP遍历文件夹与文件类及处理类用法实例
Sep 23 #PHP
You might like
初学者入门:细述PHP4的核心Zend
2006/09/05 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
用js来解决ajax读取页面乱码
2010/11/28 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
深入理解(function(){... })();
2016/08/16 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
2016/10/10 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
2016/12/03 Javascript
js实现字符全排列算法的简单方法
2017/05/01 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
Vue.js图片预览插件使用详解
2018/08/27 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
解决vue 绑定对象内点击事件失效问题
2018/09/05 Javascript
使用post方法实现json往返传输数据的方法
2019/03/30 Javascript
vue的注意规范之v-if 与 v-for 一起使用教程
2019/08/04 Javascript
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
在tensorflow中实现去除不足一个batch的数据
2020/01/20 Python
Python类继承和多态原理解析
2020/02/05 Python
python实现简单飞行棋
2020/02/06 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
美国在线自行车商店:Jenson USA
2018/05/22 全球购物
意大利香水和化妆品购物网站:Parfimo.it
2019/10/06 全球购物
电气工程及自动化专业自荐书范文
2013/12/18 职场文书
五一服装活动方案
2014/01/11 职场文书
顶撞老师检讨书
2014/02/07 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书