PHP 缩略图生成类

PHP 缩略图生成类——封装生成缩略图方法,MakeThumb类封装图片缩略图的生成方法,并且可以为缩略图添加文字或者图像水印。

PHP 缩略图生成类 语法

/*********************************************
 * @ 说明:缩略图生成类
*******************************/
class MakeThumb{
   /*
     * @ 方法说明:
     * 生成缩略图
     *
     * @ 参数说明:
     * $srcFile:原始文件存储位置
     * $disFile:缩略图存储位置
     * $dstW:图像宽
     * $dstH:图像高度
     * $rate:图像的质量值
     * $markwords:水印文字
     * $markimage:水印图像
     */
    function getmakethumb($srcFile, $dstFile, $dstW, $dstH, $rate = 100, $markwords = null,
    $markimage = null) {
        $data = GetImageSize ( $srcFile );               //获取上传图片的大小
        switch ($data [2]) {                             //判断上传图片的类型
             case 1 :
                 $im = @ImageCreateFromGIF ( $srcFile ); //创建对应类型的图片
             break;
             case 2 :
                 $im = @ImageCreateFromJPEG ( $srcFile );//创建对应类型的图片
             break;
             case 3 :
                 $im = @ImageCreateFromPNG ( $srcFile );//创建对应类型的图片
        }
        if (! $im)
             return False;
        $srcW = ImageSX ( $im );                        //返回上传图片的宽
        $srcH = ImageSY ( $im );                        //返回上传图片的高
        $dstX = 0; //定义缩略图的初始宽度变量
        $dstY = 0; //定义缩略图的初始高度变量
        //计算新建缩略图的大小
        if ($srcW * $dstH > $srcH * $dstW) {
             $fdstH = round ( $srcH * $dstW / $srcW );
             $dstY = floor ( ($dstH - $fdstH) / 2 );
             $fdstW = $dstW;
        } else {
             $fdstW = round ( $srcW * $dstH / $srcH );
             $dstX = floor ( ($dstW - $fdstW) / 2 );
             $fdstH = $dstH;
        }
        $img = ImageCreateTrueColor ( $dstW, $dstH );  //创建一个真彩图像
        $dstX = ($dstX < 0) ? 0 : $dstX;
        $dstY = ($dstX < 0) ? 0 : $dstY;
        $dstX = ($dstX > ($dstW / 2)) ? floor ( $dstW / 2 ) : $dstX;
        $dstY = ($dstY > ($dstH / 2)) ? floor ( $dstH / s ) : $dstY;
        $white = ImageColorAllocate ( $img, 255, 255, 255 ); //定义图像颜色
        $black = ImageColorAllocate ( $img, 0, 0, 0 );       //定义图像颜色
        imagefilledrectangle ( $img, 0, 0, $dstW, $dstH, $white ); //填充背景色
        imagecopyresampled ( $img, $im, $dstX, $dstY, 0, 0, $fdstW, $fdstH, $srcW, $srcH );
        //重采样复制部分图像并调整大小
        if ($markwords != null) {
            ImageTTFText ( $img, 18, - 30, $dstW / 4, $dstH / 4, $black,
            "fonts/FZHCJW.TTF", $markwords );                //写入文字水印
//参数依次为文字大小、偏转度、横坐标、纵坐标、文字颜色、文字类型、文字内容
        } elseif ($markimage != null) {
            $wimage_data = GetImageSize ( $markimage );
            switch ($wimage_data [2]) {
                case 1 :
                    $wimage = @ImageCreateFromGIF ( $markimage );
                break;
                case 2 :
                    $wimage = @ImageCreateFromJPEG ( $markimage );
                break;
                case 3 :
                    $wimage = @ImageCreateFromPNG ( $markimage );
                break;
            }
            imagecopy ( $img, $wimage, 500, 560, 0, 0, 88, 31 );
                             //写入图片水印,水印图片大小默认为88×31
            imagedestroy ( $wimage );
        }
        imagejpeg ( $img, $dstFile, $rate ); //创建jpg 格式的缩略图
        //ImageJpeg($img,$srcFile,$rate);
        imagedestroy ( $im ); //销毁图像
        imagedestroy ( $img ); //销毁图像
    }
}

在MakeThumb类中,实现生成缩略图的功能,并且可以为缩略图添加水印。其应用到的关键函数如下:
(1)通过getimagesize()函数获取上传图片的信息,包括大小、类型等信息,并根据其类型,新建一个对应类型的图像。
getimagesize()函数获取指定图像的大小。语法如下:

array getimagesize ( string filename [, array &imageinfo] )

getimagesize() 函数将测定任何 GIF、JPG、PNG、SWF、SWC、PSD、TIFF、BMP、IFF、JP2、JPX、JB2、JPC、XBM 或者 WBMP 图像文件的大小,并返回图像的尺寸以及文件类型和一个可以用于普通HTML 文件中 标记中的 height/width 文本字符串。
返回值是一个具有4个单元的数组:

  • 索引0包含图像宽度的像素值。
  • 索引1包含图像高度的像素值。
  • 索引2是图像类型的标记:1表示GIF,2表示JPG,3表示PNG,4表示SWF,5表示PSD,6表示BMP,7表示TIFF(intel byte order),8表示TIFF(motorola byte order),9表示JPC,10表示JP2,11表示JPX,12表示JB2,13表示SWC,14表示IFF,15表示WBMP,16表示XBM。
  • 索引3是文本字符串,内容为“height=”yyy”,width=”xxx””,可直接用于 IMG 标记。
    如果参数filename 指定的图像不存在或者其不是有效的图像,将返回 FALSE 并产生一条E_WARNING 级的错误。

(2)应用imagecopyresampled()函数重新生成新的图像。
imagecopyresampled()函数从原图像中采样,复制部分图像,重新生成图像。语法如下:

bool imagecopyresampled ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )

imagecopyresampled()将一幅图像中的一块正方形区域复制到另一个图像中,平滑地插入像素值,在减小图像的大小的同时,仍然保持了极大的清晰度。

  • 参数dst_image:是目标图像标识符。
  • 参数src_image:是源图像标识符。

如果源图像与目标图像的宽度和高度不同,则会进行相应的图像收缩和拉伸。参数中的坐标指的是相对于源图像左上角的坐标。本函数可用来在同一幅图像内部复制(如果dst_image和src_image相同)区域,但如果区域交叠,则结果不可预知。如果成功则返回 TRUE,失败则返回 FALSE。

PHP 缩略图生成类 示例



本实例可实现图片的任意上传操作,并通过MakeThumb类为上传图片生成缩略图,添加文字水印。最后输出上传图片对应的缩略图。

为上传图片生成缩略图的关键步骤如下:
(1)在上传文件的处理页index_ok.php中,包含thumbnail.php文件;实例化MakeThumb类,返回操作对象thumnail。重新定义上传文件的类型,并重新指定上传文件的存储位置,定义原始文件存储文件夹和缩略图存储文件夹;在通过move_uploaded_file()函数完成文件的上传操作后,通过thumnail对象调用getmakethumb()方法将上传的图片生成缩略图,并添加文字水印。index_ok.php文件的关键代码如下:

<?php
header ( "Content-type: text/html; charset=UTF-8" ); //设置文件编码格式
include "conn/conn.php";
include "thumbnail.php"; //包含缩略图生成类
$thumnail=new MakeThumb(); //执行类的实例化
if (isset($_POST ['files'])) { //判断上传文件是否存在
     $data = date ( "Y-m-d H:m:s" );
     function check($var) { //验证数组的返回值是否为空
        return ($var != "");
     }
     $files = array_filter ( $_POST ['files'], 'check'); //去除数组中空值
     $array = array_filter ( $_FILES ['picture'] ['name'], "check" ); //去除数组中空值
     foreach ( $array as $key => $value ) { //循环读取数组中的数据
        $types = strtolower ( strstr ( $value, '.' ) ); //截取上传文件的后缀
        if ($types == ".jpg" || $types == ".gif" || $types == ".png") {
                                   //判断上传文件的后缀是否符合要求
            $thumbnail = 'thumbnail/';
            $original = 'original/';
            $file_name = time () . $key . strtolower ( strstr ( $value, "." ) );
                                     //定义上传文件名称
            $path = $original . $file_name; //定义原始文件的存储位置
            $path_thumbnail = $thumbnail . $file_name; //定义缩略图的存储位置
            move_uploaded_file ( $_FILES ['picture'] ['tmp_name'] [$key], $path );
                                     //执行上传操作
            $thumnail->getmakethumb ( $path, $path_thumbnail, "200", "200", "100",
            "www.deepinout.com" ); //生成缩略图
            $query = "insert into tb_up_file (file_test,path_thumbnail,data,file_name)
            values ('$path','$path_thumbnail','$data','$files[$key]')";
            $result = mysql_query ( $query );
        } else {
            echo "上传文件" . $value . "类型不正确!";
        }
}
    echo "<script>alert('图片上传成功'); window.location.href='index.html';</script>";
}
?>

(2)编写thumbnail.php文件,创建MakeThumb类,定义getmakethumb()方法,完成缩略图的生成和水印的添加操作。
说明
下面要介绍的图形绘制类是Jpgraph类库中已经封装好的内容,这里只是展示它的强大功能,以及它的基本应用。
Jpgraph类库是基于GD2函数库编写的主要用于创建统计图的类库。在绘制统计图方面不仅功能非常强大,而且代码编写方便,只需简单的几行代码就可以绘制出非常复杂的统计图效果,从而很大程度上提高编程人员的开发效率。

赞(0)
未经允许不得转载:极客笔记 » PHP 缩略图生成类
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址