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 checkbox 取值详细说明
Aug 19 PHP
PHPUnit PHP测试框架安装方法
Mar 23 PHP
rephactor 优秀的PHP的重构工具
Jun 09 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
php+mysql实现用户注册登陆的方法
Jan 03 PHP
php获取错误信息的方法
Jul 17 PHP
php文件上传你必须知道的几点
Oct 20 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
解决PHP上传非标准格式的图片pjpeg失败的方法
Mar 12 PHP
Thinkphp实现站点静态化的方法详解
Mar 21 PHP
Laravel中错误与异常处理的用法示例
Sep 16 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
用php获取远程图片并把它保存到本地的代码
2008/04/07 PHP
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
基于jquery的一个简单的脚本验证插件
2010/04/05 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
找出字符串中出现次数最多的字母和出现次数精简版
2012/11/07 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
jQuery中;function($,undefined) 前面的分号的用处
2014/12/17 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
JS延时器提示框的应用实例代码解析
2016/04/27 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
python插入排序算法的实现代码
2013/11/21 Python
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
pandas series序列转化为星期几的实例
2018/04/11 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
心得体会怎么写
2013/12/30 职场文书
法务专员岗位职责
2014/01/02 职场文书
学校岗位设置方案
2014/01/16 职场文书
银行办公室岗位职责
2014/03/10 职场文书
中学校庆方案
2014/03/17 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
Java中的随机数Random
2022/03/17 Java/Android