关于 缩略图 类的 的修改,添加了,水印

本文介绍了一个PHP类,用于处理图片的缩略图生成,包括图片的裁剪、按比例缩放,并支持文字和图片水印功能。该类支持常见的图片格式如JPEG、GIF、PNG等。
<?php
/**
*说明:               这个类完成缩略图的生成,支持页面显示和生成文件,文字水印,图象水印
*version             2.0
*@author             sanshi(叁石)
*QQ:                 35047205
*MSN:                 sanshi0815@tom.com
*Create              2007/5/11
*******************************************************
*@param   string     $srcFile    源文件   
*@param   string     $dstFile    目标文件
*@param   string     $fileType   当前文件类型
*@param   string     $im         图片打开资源句柄
*@param   array      $imgType    文件类型定义
*/
class MakeMiniature
{
    
var $srcFile;             //源文件
    var $dstFile;             //目标文件
    var $fileType;            //文件类型
    var $im;                  //图片打开资源句柄
    var $isPrint = true;      //是否加水印
    var $setTxt  = "www.金库.com";          //水印的文字
    var $setPrintFile="" ;                //设置水印图片     
    var $font ;                 //设置字体
    var $imgType=array("jpg", //文件类型定义
                       "gif",
                       
"png",
                       
"bmp");
    
function MakeMiniature()
    {
        
$this->font = FONT_PATH."simhei.ttf";
        
    }
    
//取得显示的文字
    function getTxt($instring)
    {
        
//return iconv("GB2312","UTF-8",$instring);
         $outstring="";
         
$max=strlen($instring);
         
for($i=0;$i<$max;$i++)
         {
            
$h=ord($instring[$i]);
            
if($h>=160 && $i<$max-1)
            {
              
$outstring.="&#".base_convert(bin2hex(iconv("gb2312","ucs-2",substr($instring,$i,2))),16,10).";";
              
$i++;
            }
            
else
            {
              
$outstring.=$instring[$i];
            }
         }
         
//echo $outstring;exit();
        return $outstring;
    }
    
//图片水印的使用
    function makeImgPrint($im)
    {
        
$src = $this->loadImg('jpg',$this->setPrintFile);
        
$src_x = 0;
        
$src_y =  0;
        
$src_w = $this->getImgWidth($src);
        
$src_h = $this->getImgHeight($src);
        
$dst_x = $this->getImgWidth($im);
        
$dst_y = $this->getImgHeight($im);
        
$height = $dst_y-$src_h;
        
$width = ($dst_x-$src_w)/2;
        imagealphablending(
$im,true);
        imagecopymerge(
$im,$src,$width,$height,0,0,$src_w,$src_h,70);
        
return $im;
    }
    
//文字水印的使用
    function makePrint($im)
    {
        
//旋转角度
        $angle = 20
        
$width = $this->getImgWidth($im)/10;
        
$size = $width ;
        
$height = $this->getImgHeight($im)-$this->getImgHeight($im)/50;
        
$black = imagecolorallocate($im, 0, 0, 0);
        
$grey = imagecolorallocate($im, 180, 180, 180);
        
for($i=1;$i<=3;$i++)
        {
            
//$height +=$height*3/10;
            $height =$height-$this->getImgHeight($im)/5;
            imagettftext (
$im, $size, $angle,$width,$height, $grey, $this->font, $this->getTxt($this->setTxt));
        }
        
return $im;
    }
    
/**
    *说明:                        取得文件类型
    *@param  string $fileName     文件名
    *@return boolean              符合return true
    
*/
    
function findType($fileName)
    {
        
if($type=strstr($fileName,"."))
        {
            
$type=substr($type,1);
            
if(!strstr($type,"."))
            {
                
$var=$type;
            }
else{
                
echo "file type error!<br>";
            }
        }
else{
            
echo "file type error!<br>";
        }
        
for($i=0;$i<=count($this->imgType);$i++)
        {
            
if(Strcmp($this->imgType[$i],$var)==0)
            {
                
$this->fileType=$var;
                
return true;
            }
        }
        
return false;
    }
    
/**
    *@param    $fileType     文件类型
    *@return   resource      打开图片的资源句柄
    
*/
    
function loadImg($fileType,$srcFile="")
    {
        
$type=$this->isNull($fileType);
        
if($srcFile==""$srcFile=$this->srcFile;
        
switch($type)
        {
            
case "jpg":
                
$im=imageCreateFromjpeg($srcFile);
                
break;
            
case "gif":
                
$im=imageCreateFromGIF($srcFile);
                
break;
            
case "png":
                
$im=imagecreatefrompng($srcFile);
                
break;
            
case "bmp":
                
$im=imagecreatefromwbmp($srcFile);
                
break;
            
default:
                
$im=0;
                
echo "not you input file type!<br>";
                
break;
        }
        
$this->im=$im;
        
return $im;
    }
    
/**
    *说明: 判断标量是否为空,不为空返回变量
    
*/
    
function isNull($var)
    {
       
if(!isset($var)||empty($var))
        {
            
echo "变量值为null!<br>";
            
exit(0);
         }
         
return $var;
     }
    
/**
    *说明:            设置源文件名和生成文件名,同时完成了文件类型的确定
    *                还有对文件的打开
    *@param string  srcFile      目标文件
    *@param String  dstFile      建立文件
    
*/
    
function setParam($srcFile,$dstFile)
    {
        
$this->srcFile=$this->isNull($srcFile);
        
$this->dstFile=$this->isNull($dstFile);
        
if(!$this->findType($srcFile))
        {
            
echo "file type error!";
        }
        
if(!$this->loadImg($this->fileType))
        {
            
echo "open ".$this->srcFile."error!<br>";
        }
    }
    
/**
    *说明       取得图象的宽度
    *@param    resource im      打开图象成功的资源
    *@return   int      width   图象的宽度  
    
*/
    
function getImgWidth($im)
    {
        
$im=$this->isNull($im);
        
$width=imagesx($im);
        
return $width;
    }
    
/**
    *说明       取得图象的高度
    *@param    resource im      打开图象成功的资源
    *@return   int      height  图象的高度
    
*/
    
function getImgHeight($im)
    {
        
$im=$this->isNull($im);
        
$height=imagesy($im);
        
return $height;
    }
    
/**
    *说明        建立图象
    *@param     resource im      打开图象成功的资源
    *@param     int      scale   生成图象是与原图象的比例为百分比
    *@param     boolean  page    是否输出到页面
    
*/
    
function createImg($im,$scale,$page)
    {
        
$im=$this->isNull($im);
        
$scale=$this->isNull($scale);
        
$srcW=$this->getImgWidth($im);
        
$srcH=$this->getImgHeight($im);
        
$detW=round($srcW*$scale/100);
        
$detH=round($srcH*$scale/100);
        
//$om=ImageCreate($detW,$detH);//普通的使用
        $om=imagecreatetruecolor($detW,$detH);//真色彩对gb库有要求
        //ImageCopyResized($om,$im,0,0,0,0,$detW,$detH,$srcW,$srcH);

        imagecopyresampled($om,$im,0,0,0,0,$detW,$detH,$srcW,$srcH);
        
$this->showImg($om,$this->fileType,$page);

    }
        
/**
    *说明        建立图象
    *@param     resource im      打开图象成功的资源
    *@param     int      scale   生成图象是与原图象的比例为百分比
    *@param     boolean  page    是否输出到页面
    
*/
    
function createNewImg($im,$width,$height,$page)
    {
        
$im=$this->isNull($im);
        
//$scale=$this->isNull($scale);
        $srcW=$this->getImgWidth($im);
        
$srcH=$this->getImgHeight($im);
        
$detW=$this->isNull($width);
        
$detH=$this->isNull($height);
        
//$om=ImageCreate($detW,$detH);//普通的使用
        $om=imagecreatetruecolor($detW,$detH);//真色彩对gb库有要求
        //ImageCopyResized($om,$im,0,0,0,0,$detW,$detH,$srcW,$srcH);

        imagecopyresampled($om,$im,0,0,0,0,$detW,$detH,$srcW,$srcH);
        
//om 为生成的图片资源
        
        
$this->showImg($om,$this->fileType,$page);

    }
    
/**
    *说明   输出图象建立失败的提示
    *@param boolean   boolean   判断是否输出
    
*/
    
function inputError($boolean)
    {
        
if(!$boolean)
        {
            
echo "img input error!<br>";
        }
    }
    
/**
    *说明     根据条件显示图片输出位置和类型
    *@param  resource     $om       图象输出的资源
    *@param  String       $type     输出图象的类型,现在使用源图象的类型
    *@param  boolean      $page     是否在页面上显示
    
*/
    
function showImg($om,$type,$page)
    {
        
$om=$this->isNull($om);
        
if($this->isPrint)
        { 
            
$om = $this->makePrint($om);
            
if($this->setPrintFile)
                
$om = $this->makeImgPrint($om);
        }
        
$type=$this->isNull($type);
        
switch($type)
        {
            
case "jpg":
                
if($page)
                {
                  
$suc=imagejpeg($om);
                  
$this->inputError($suc);
                }
else{
                  
$suc=imagejpeg($om,$this->dstFile);
                  
$this->inputError($suc);
                }
                
break;
            
case "gif":
                
if($page)
                {
                  
$suc=imagegif($om);
                  
$this->inputError($suc);
                }
else{
                  
$suc=imagegif($om,$this->dstFile);
                  
$this->inputError($suc);
                }
                
break;
            
case "png":
                
if($page)
                {
                  
$suc=imagepng($om);
                  
$this->inputError($suc);
                }
else{
                  
$suc=imagepng($om,$this->dstFile);
                  
$this->inputError($suc);
                }
                
break;
            
case "bmp":
                
if($page)
                {
                  
$suc=imagewbmp($om);
                  
$this->inputError($suc);
                }
else{
                  
$suc=imagewbmp($om,$this->dstFile);
                  
$this->inputError($suc);
                }
                
break;
            
default:
                
echo "not you input file type!<br>";
                
break;
        }
    }
}
?>
<?php
//$file=new MakeMiniature();
//echo $file->getTxt('jinku');
//$file->setParam("Logo.jpg","p.jpg");//设置源文件,跟生成文件
//$file->createImg($file->im,200,true);//按比例生成图象,比例为200%,在页面上显示
//$file->createImg($file->im,200,false);//按比例生成图象,比例为200%,生成图片保存到上面设置的名字和路径
//$file->createNewImg($file->im,20,10,false);//按照自己设计的长宽生成图象,保存或者显示在页面上

?>

 同时支持了,中文,还有图片做水印的功能,有bug请提出

使用的时候请注意,默认字体的使用,好多字体都不能正常显示中文,一般使用simhei.ttf 这个字体,反复测试没有问题的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值