php实现根据url自动生成缩略图的方法

本文实例讲述了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 用法请查看这里:http://www.jb51.net/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程序设计有所帮助。

(0)

相关推荐

  • PHP实现生成透明背景的PNG缩略图函数分享

    之前在WEB开发笔记写过一个PHP生成缩略图的函数,虽然那个函数能够生成缩略图,但是有一定的缺陷,在生成PNG缩略图的时候,背景是黑色,今天又写了一个函数来弥补一下.代码很简单,就是imagealphablending($thumb,false);与imagesavealpha($thumb,true);很重要.主要就是把PNG的alpha值保存,不要丢失而已. 函数如下: <?PHP /* *$sourePic:原图路径 * $smallFileName:小图名称 * $width:小图宽 *

  • php实现的支持imagemagick及gd库两种处理的缩略图生成类

    本文实例讲述了php实现的支持imagemagick及gd库两种处理的缩略图生成类及其用法实例,非常具有实用价值.分享给大家供大家参考.具体如下: 一.功能: 1.按比例缩小/放大 2.填充背景色 3.按区域裁剪 4.添加水印,包括水印的位置,透明度等 使用imagemagick/GD库实现,imagemagick地址:www.imagemagick.org 需要安装imagemagick,安装方法如下:http://www.jb51.net/article/55528.htm 二.实现方法:

  • 完美实现GIF动画缩略图的php代码

    下面通过一个取自CS警匪游戏的GIF动画来说明问题: GIF动画图片:old.gif 为了让问题更加清晰,我们先还原动画各帧: 选择一:用PHP中的Imagick模块: 复制代码 代码如下: <?php $image = new Imagick('old.gif'); $i = 0; foreach ($image as $frame) { $frame->writeImage('old_' . $i++ . '.gif'); } ?> 选择二:用ImageMagick提供的conver

  • 使用gd库实现php服务端图片裁剪和生成缩略图功能分享

    裁剪示例: 最终裁剪成的图片: 其中虚线框内就是要裁剪出来的图片,最终保存成100宽的图片.代码如下: 复制代码 代码如下: $src_path = '1.jpg';//创建源图的实例$src = imagecreatefromstring(file_get_contents($src_path)); //裁剪开区域左上角的点的坐标$x = 100;$y = 12;//裁剪区域的宽和高$width = 200;$height = 200;//最终保存成图片的宽和高,和源要等比例,否则会变形$fi

  • thinkphp3.2.2实现生成多张缩略图的方法

    本文实例讲述了thinkphp3.2.2实现生成多张缩略图的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: public function dz_upload() { //上传多张缩略图   上传2张缩略图     if (isset($_FILES['ori_img'])){     $upload = new \Think\UploadFile();// 实例化上传类     $upload->maxSize = 3000000 ;// 设置附件上传大小  C('UP

  • PHP中使用FFMPEG获取视频缩略图和视频总时长实例

    复制代码 代码如下: //获得视频文件的缩略图function getVideoCover($file,$time,$name) {     if(empty($time))$time = '1';//默认截取第一秒第一帧     $strlen = strlen($file);     // $videoCover = substr($file,0,$strlen-4);     // $videoCoverName = $videoCover.'.jpg';//缩略图命名     //exe

  • 超级好用的一个php上传图片类(随机名,缩略图,加水印)

    Upimages.class.php php上传类 复制代码 代码如下: <?php class UpImages { var $annexFolder = "upload";//附件存放点,默认为:annex var $smallFolder = "small";//缩略图存放路径,注:必须是放在 $annexFolder下的子目录,默认为:smallimg var $markFolder = "mark";//水印图片存放处 var $

  • 使用ThinkPHP生成缩略图及显示

    使用ThinkPHP生成缩略图及显示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 首先了解父类Image.class.php(ThinkPHP/Library/Think/Image.class.php)中的一些函数 1:open() 打开被处理的图片 2:thumb() 生成缩略图 默认1等比缩放  (其中2,3,4,5,6代表的含义参见父类文件Image.class.php) 3:save() 缩略图到服务器 生成缩略图步骤分以下四步 * 1.实例化 * 2.打开图片open() *

  • Thinkphp调用Image类生成缩略图的方法

    本文实例讲述了Thinkphp调用Image类生成缩略图的方法.分享给大家供大家参考.具体分析如下: Thinkphp的Image类 在ThinkPHP/Extend/Library/ORG/Util/Image.class.php中. 调用方法如下: import("ORG.Util.Image"); $Img = new Image();//实例化图片类对象 $image_path = './图片路径'; //若当前php文件在Thinkphp的中APP_PATH路径中 //'./

  • php实现上传图片生成缩略图示例

    功能很简单,代码中有注释,直接给大家上代码了 复制代码 代码如下: <?php/** * 上传图片生成缩略图 *  * 需要GD2库的支持 *  * 初始化时需要参数new thumbnails('需要缩略的图片的原始地址','缩略图的宽度','缩略图的高度','(可选参数)缩略图的保存路径'); * 如果最后一个参数不指定,那么缩略图就默认保存在原始图片的所在目录里的small文件夹里, * 如果不存在small文件夹,则会自动创建small文件夹 *  * 初始化之后需要调用方法produc

随机推荐