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基础知识:函数基础知识
Dec 13 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
May 07 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
支付宝接口开发集成支付环境小结
Mar 17 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
PHP rsa加密解密使用方法
Apr 27 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
PHP new static 和 new self详解
2017/02/19 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
jQuery 前的按键判断代码
2010/03/19 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
深究AngularJS——ng-checked(回写:带真实案例代码)
2017/06/13 Javascript
BootStrap Table前台和后台分页对JSON格式的要求
2017/06/28 Javascript
js插件实现图片滑动验证码
2020/09/29 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
[02:07]TI9显影之尘系列 - Vici Gaming
2019/08/20 DOTA
Python中selenium实现文件上传所有方法整理总结
2017/04/01 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
法国在线购买汽车轮胎网站:123pneus.fr
2019/02/25 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
物控部经理职务说明书
2014/02/25 职场文书
德语专业求职信
2014/03/12 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
先进集体申报材料
2014/12/25 职场文书
六一儿童节开幕词
2015/01/29 职场文书
关于迟到的检讨书
2015/05/06 职场文书
抢劫罪辩护词
2015/05/21 职场文书
北京青年观后感
2015/06/15 职场文书
病假证明模板
2015/06/19 职场文书
2019年公司快递收发管理制度模板
2019/11/20 职场文书
golang json数组拼接的实例
2021/04/28 Golang