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 静态页面中显示动态内容
Aug 14 PHP
PHP异步调用socket实现代码
Jan 12 PHP
php命令行用法入门实例教程
Oct 27 PHP
微信公众号开发之微信公共平台消息回复类实例
Nov 14 PHP
PHP 魔术变量和魔术函数详解
Feb 25 PHP
php源码分析之DZX1.5随机数函数random用法
Jun 17 PHP
PHP之预定义接口详解
Jul 29 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 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示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
基于Bootstrap的Java开发问题汇总(Spring MVC)
2017/01/15 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
Python命名空间详解
2014/08/18 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
解决python中import文件夹下面py文件报错问题
2020/06/01 Python
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
党支部公开承诺践诺书
2014/03/28 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
六查六看剖析材料
2014/10/06 职场文书
2015年语文教师工作总结
2015/05/25 职场文书
为自己工作观后感
2015/06/11 职场文书
房产证明范本
2015/06/19 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
Mysql InnoDB 的内存逻辑架构
2022/05/06 MySQL