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 特殊字符处理函数
Sep 05 PHP
php 获取完整url地址
Dec 20 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
微信公众平台DEMO(PHP)
May 04 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
php.ini中date.timezone设置详解
Nov 20 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
php引用和拷贝的区别知识点总结
Sep 23 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 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
一个连接两个不同MYSQL数据库的PHP程序
2006/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
python 类详解及简单实例
2017/03/24 Python
python学生信息管理系统(初级版)
2018/10/17 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
python访问hdfs的操作
2020/06/06 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
Python之京东商品秒杀的实现示例
2021/01/06 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
捷克多品牌在线时尚商店:ANSWEAR.cz
2020/10/03 全球购物
数控技术与应用毕业生自荐信
2013/09/24 职场文书
物业招聘计划书
2014/01/10 职场文书
低碳生活倡议书
2014/04/14 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
不遵守课堂纪律的检讨书
2014/09/24 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
浅析Python OpenCV三种滤镜效果
2022/04/11 Python