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 文件中 <IMG>标记中的 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函数库编写的主要用于创建统计图的类库。在绘制统计图方面不仅功能非常强大,而且代码编写方便,只需简单的几行代码就可以绘制出非常复杂的统计图效果,从而很大程度上提高编程人员的开发效率。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程