我的一亩三分地 我就喜欢!
13fen  设为主页
 收藏本站
 
当前位置: > 一亩三分地:首页 > 网络学院 > 网络编程 > PHP专区 > php应用/技巧 > 高质量缩略图的生成函数(多种剪切模式,按高度宽度最佳缩放
热门文章排行
热门文章排行 检查email地址格式的代码(01-11)
PHP操作文件问答(01-11)
PHP安装攻略:安装并配置PHP(10-23)
PHP的十个高级技巧 4(10-23)
PHP控制语句(10-12)
精采文章排行
精采文章排行 PHP连接MYSQL的两种方法(11-15)
PHP和MySQL开发的8个技巧(10-23)
PHP安装攻略:安装并配置PHP(10-23)
php+mysql扎实个人基本功(10-23)
PHP编程常用技巧四则(10-23)
技术专题推荐
网管论坛交流
 

高质量缩略图的生成函数(多种剪切模式,按高度宽度最佳缩放 

作者:佚名   来源:本站教程   点击:   日期:2007-01-11

/**

* 可扩展的缩略图生成函数

* 在http://yodoo.com的论坛里可以获得最新版本(注册用户)

* 演示效果也请登录http://yodoo.com看看,该站所有的缩略图(jpg,png)都是使用该函数生成的

*

* 转载请保留完整信息

*

* @author Austin Chin <austinfay@hotmail.com> http://yodoo.com

* @version $Revision: 1.7 $

*

*

* version

*

* + 表示增加的功能

* - 表示丢弃的功能

* C 表示修正的功能

* E 表示扩展了功能

*

* v1.5

* makeThumb($srcFile, $dstFile, $dstW, $dstH, $option=1)

*

* v1.6

* + 增加了剪切模式

* + $option 8: 宽度最佳缩放

* + $option 16: 高度最佳缩放

* makeThumb($srcFile, $dstFile, $dstW, $dstH, $option=1, $cutmode=0, $startX=0,

*     $startY=0)

*

* v1.7

* E 返回值改为数组,第一个元素是代码 0 表示正常, 其它位错误代码;第二个元素是错误描述。

* 错误代码:

* -1 源文件不存在。

* -2 不支持的图片输出函数

* -3 不支持的图片创建函数

* -4 HTTP头信息已经输出,无法向浏览器输出图片。

* -5 无法检测输出的图片类型

* + 增加函数 message2Image 可以把字符串输出成图片格式

*/





/**

* 可扩展的缩略图生成函数

*

* @param string $srcFile 源文件

* @param string $srcFile 目标文件

* @param int $dstW 目标图片的宽度(单位:像素)

* @param int $dstH 目标图片的高度(单位:像素)

* @param int $option 附加参数,可以相加使用,如1+2(或者 1|2)表示同时执行1和2的功能。

*      1: 默认,输出到指定文件 2: 图片内容输出到浏览器 4: 不保持图片比例

*      8:宽度最佳缩放 16:高度最佳缩放

* @param int $cutmode 剪切模式 0: 默认模式,剪切模式 1: 左或上 2: 中 3: 右或下

* @param int $startX 剪切的起始横坐标(像素)

* @param int $startY 剪切的起始纵坐标(像素)

* @return array return[0]=0: 正常; return[0] 为错误代码 return[1] string: 错误描述

*/

define(OP_TO_FILE, 1);              //输出到指定文件

define(OP_OUTPUT, 2);               //图片内容输出到浏览器

define(OP_NOT_KEEP_SCALE, 4);       //不保持图片比例, 即使用拉伸

define(OP_BEST_RESIZE_WIDTH, 8);    //宽度最佳缩放

define(OP_BEST_RESIZE_HEIGHT, 16);  //高度最佳缩放



define(CM_DEFAULT,  0);             // 默认模式

define(CM_LEFT_OR_TOP,  1);         // 左或上

define(CM_MIDDLE,       2);         // 中

define(CM_RIGHT_OR_BOTTOM,  3);     // 右或下



function makeThumb($srcFile, $dstFile, $dstW, $dstH, $option=OP_TO_FILE,

    $cutmode=CM_DEFAULT, $startX=0, $startY=0) {



    $img_type = array(1=>"gif", 2=>"jpeg", 3=>"png");

    $type_idx = array("gif"=>1, "jpg"=>2, "jpeg"=>2, "jpe"=>2, "png"=>3);



    if (!file_exists($srcFile)) {

        return array(-1, "Source file not exists: $srcFile.");

    }



    $path_parts = @pathinfo($dstFile);

    $ext = strtolower ($path_parts["extension"]);

    if ($ext == "") {

        return array(-5, "Can't detect output image's type.");

    }

    $func_output = "image" . $img_type[$type_idx[$ext]];

    if (!function_exists ($func_output)) {

        return array(-2, "Function not exists for output:$func_output.");

    }



    $data = @GetImageSize($srcFile);

    $func_create = "imagecreatefrom" . $img_type[$data[2]];

    if (!function_exists ($func_create)) {

        return array(-3, "Function not exists for create:$func_create.");

    }



    $im = @$func_create($srcFile);



    $srcW = @ImageSX($im);

    $srcH = @ImageSY($im);

    $srcX = 0;

    $srcY = 0;

    $dstX = 0;

    $dstY = 0;

   



    if ($option & OP_BEST_RESIZE_WIDTH) {

        $dstH = round($dstW * $srcH / $srcW);

    }



    if ($option & OP_BEST_RESIZE_HEIGHT) {

        $dstW = round($dstH * $srcW / $srcH);

    }



    $fdstW = $dstW;

    $fdstH = $dstH;



    if ($cutmode != CM_DEFAULT) { // 剪切模式 1: 左或上 2: 中 3: 右或下

        $srcW -= $startX;

        $srcH -= $startY;

        if ($srcW*$dstH > $srcH*$dstW) {

            $testW = round($dstW * $srcH / $dstH);

            $testH = $srcH;

        } else {

            $testH = round($dstH * $srcW / $dstW);

            $testW = $srcW;

        }

        switch ($cutmode) {

            case CM_LEFT_OR_TOP: $srcX = 0; $srcY = 0; break;

            case CM_MIDDLE: $srcX = round(($srcW - $testW) / 2);

                            $srcY = round(($srcH - $testH) / 2); break;

            case CM_RIGHT_OR_BOTTOM: $srcX = $srcW - $testW;

                                     $srcY = $srcH - $testH;

        }

        $srcW = $testW;

        $srcH = $testH;

        $srcX += $startX;

        $srcY += $startY;

    } else { // 原始缩放



        if (!($option & OP_NOT_KEEP_SCALE)) {

            // 以下代码计算新大小,并保持图片比例

            if ($srcW*$dstH>$srcH*$dstW) {

 &nb

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·将OICQ数据转成MYSQL数据 ·用PHP实现ODBC数据分页显示一例
·php生成WAP页面 ·PHP与Javascript的两种交互方式
·PHP+Javascript模拟Matrix画面 ·WHOIS类的修改版

   文章评论:(条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:一分  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。