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 5.0对象模型深度探索之对象复制
Mar 27 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
PHP中header用法小结
May 23 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 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的autoload机制的实现解析
2012/09/15 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
模板视图和AngularJS之间冲突的解决方法
2016/11/22 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
从零学习node.js之简易的网络爬虫(四)
2017/02/22 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
Vue表单输入绑定的示例代码
2018/11/01 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
python实现指定字符串补全空格的方法
2015/04/30 Python
给Python中的MySQLdb模块添加超时功能的教程
2015/05/05 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
python的变量与赋值详细分析
2017/11/08 Python
浅谈python中的占位符
2017/11/09 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
python 切换root 执行命令的方法
2019/01/19 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
2019/08/06 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
html5中valid、invalid、required的定义
2014/02/21 HTML / CSS
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
婚纱店策划方案
2014/05/22 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
Oracle锁表解决方法的详细记录
2022/06/05 Oracle