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 相关文章推荐
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
经典的PHPer为什么被认为是草根?
Apr 02 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
php 使用array函数实现分页
Feb 13 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
php post大量数据时发现数据丢失问题解决方法
Jun 20 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
Mar 21 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
PHP中的self关键字详解
Jun 23 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 PHP
tp5.1 框架join方法用法实例分析
May 26 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 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
php在线解压ZIP文件的方法
2014/12/30 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
javascript编程起步(第四课)
2007/02/27 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
js日期插件dateHelp获取本月、三个月、今年的日期
2016/03/07 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
[48:21]林俊杰圣堂刺客超神杀戮秀
2014/10/29 DOTA
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python批量修改文件名的实现代码
2014/09/01 Python
Python标准库之循环器(itertools)介绍
2014/11/25 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
详解python 注释、变量、类型
2018/08/10 Python
python使用requests.session模拟登录
2019/08/09 Python
python ftplib模块使用代码实例
2019/12/31 Python
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
英语专业学生的自我评价
2013/12/30 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
文明礼仪伴我行演讲稿
2014/05/12 职场文书
安全口号大全
2014/06/21 职场文书
俄语专业毕业生求职信
2014/07/12 职场文书
Python+Appium新手教程
2021/04/17 Python
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android