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 相关文章推荐
Banner程序
Oct 09 PHP
弄了个检测传输的参数是否为数字的Function
Dec 06 PHP
使用TinyButStrong模板引擎来做WEB开发
Mar 16 PHP
php中变量及部分适用方法
Mar 27 PHP
JS实现php的伪分页
May 25 PHP
探讨:web上存漏洞及原理分析、防范方法
Jun 29 PHP
php预定义变量使用帮助(带实例)
Oct 30 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
PHP实现微信对账单处理
Oct 01 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 PHP
Yii 框架使用Forms操作详解
May 18 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静态类
2006/11/25 PHP
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
javascript fullscreen全屏实现代码
2009/04/09 Javascript
javascript Math.random()随机数函数
2009/11/04 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
Node.js包管理器Yarn的入门介绍与安装
2016/10/17 Javascript
JS实现的样式切换功能tableCSS实例
2016/12/30 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
2020/05/22 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
wxPython使用系统剪切板的方法
2015/06/16 Python
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
2020/03/18 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
安全生产实施方案
2014/02/23 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
工会经费申请报告
2015/05/15 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android