龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php缩略图类

时间:2014-07-22 14:52来源: 作者: 点击:
分享到:
其中,若使用bmp图片处理,需包含bmp.php,a href=http://blog.csdn.net/joliny/article/details/1659441#comments title=http://blog.csdn.net/joliny/article/details/1659441#commentshttp://blog.csdn.net/joliny/article/details/1659441#
其中,若使用bmp图片处理,需包含bmp.php, http://blog.csdn.net/joliny/article/details/1659441#comments
require_once('bmp.php');

/*
 * Created on 20:31 2011-8-2
 * Author : LKK , http://lianq.net
 * 使用方法:
 *$resizeimage = new myThumbClass($file_name,120,90,$thumb,0,0);  //生成120x90大小
 *$resizeimage = new myThumbClass($file_name,1,2,$thumb,1,233);   //生成高,宽之中最大233
 *$resizeimage = new myThumbClass($file_name,660,1,$thumb,-1,0);  //生成宽度660
 *$resizeimage = new myThumbClass($file_name,1,660,$thumb,-1,0);  //生成高度660
 *注意:新高度或新宽度都不能为0
*/

class myThumbClass{

	public $sur_file;	//读取的原图片
	public $des_file;	//生成目标图片
	public $tem_file;	//临时图片
	public $tag;		//缩略标签  0,默认,按固定的高宽生成  1,按比列或固定最大长度生成  -1,按某个宽度或某个高度缩小
	public $resize_width;		//$tag为0时,目标文件宽
	public $resize_height;		//$tag为0时,目标文件高
	public $sca_max;	//$tag为1时,<0$sca_max<1时为缩小比例;$sca_max>1时为最大长度(高或宽之中的最大值)

	public $type;		//图片类型
	public $width;		//原图片宽
	public $height;		//原图片高

	//构造函数
	public function __construct($surpic, $reswid, $reshei, $despic, $mark, $scamax){
		$this->sur_file = $surpic;
		$this->resize_width = $reswid;
		$this->resize_height = $reshei;
		$this->tag = $mark;
		$this->sca_max = $scamax;

		$this->type = strtolower(substr(strrchr($this->sur_file,"."),1));	//获取图片类型
		$this->init_img();	//初始化图片
		$this->des_file = $despic;	//目标图片地址
		$this->width = imagesx($this->tem_file);
		$this->height = imagesy($this->tem_file);
		$this->new_img();
		imagedestroy($this->tem_file);
	}

	//图片初始化函数
	private function init_img(){
		if($this->type == 'jpeg'){
			$this->tem_file = imagecreatefromjpeg($this->sur_file);
		}elseif($this->type == 'jpg'){
			$this->tem_file = imagecreatefromjpeg($this->sur_file);
		}elseif($this->type == 'gif'){
            $this->tem_file = imagecreatefromgif($this->sur_file);
		}elseif($this->type == 'png'){
            $this->tem_file = imagecreatefrompng($this->sur_file);
		}elseif($this->type == 'bmp'){
            $this->tem_file = imagecreatefrombmp($this->sur_file);	//bmp.php中包含
		}
	}

	//图片生成函数
	private function new_img(){
		$ratio = ($this->width)/($this->height);	//原图比例
		$resize_ratio = ($this->resize_width)/($this->resize_height);	//缩略后比例
		$newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);//生成新图片

		if($this->tag == 0){	//按固定高宽截取缩略图
			$newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);//生成新图片
			if($ratio>=$resize_ratio){//即等比例下,缩略图的高比原图长,因此高不变
				imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, $this->resize_width,$this->resize_height, (($this->height)*$resize_ratio), $this->height);
			}elseif($ratio<$resize_ratio){//即等比例下,缩略图的宽比原图长,因此宽不变
				imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, $this->resize_width,$this->resize_height, $this->width, (($this->width)/$resize_ratio));
			}
		}elseif($this->tag == 1){	//按固定比例或最大长度缩小
			if($this->sca_max < 1){	//按比例缩小
				$newimg = imagecreatetruecolor((($this->width)*($this->sca_max)),(($this->height)*($this->sca_max)));//生成新图片
				imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, (($this->width)*($this->sca_max)), (($this->height)*($this->sca_max)), $this->width, $this->height);

			}elseif($this->sca_max > 1){	//按某个最大长度缩小
				if($ratio>=1){	//宽比高长
					$newimg = imagecreatetruecolor($this->sca_max,($this->sca_max/$ratio));//生成新图片
					imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, $this->sca_max,($this->sca_max/$ratio), $this->width, $this->height);
				}else{
					$newimg = imagecreatetruecolor(($this->sca_max*$ratio),$this->sca_max);//生成新图片
					imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, ($this->sca_max*$ratio),$this->sca_max, $this->width, $this->height);
				}
			}
		}elseif($this->tag == -1){	//按某个宽度或某个高度缩小
		  if($resize_ratio>=1){//新高小于新宽,则图片按新宽度缩小
		    $newimg = imagecreatetruecolor($this->resize_width,($this->resize_width/$ratio));//生成新图片
			imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, $this->resize_width,($this->resize_width/$ratio), $this->width, $this->height);
		  }elseif($resize_ratio<1){//新宽小于新高,则图片按新高度缩小
		    $newimg = imagecreatetruecolor(($this->resize_height*$ratio),$this->resize_height);//生成新图片
					imagecopyresampled($newimg, $this->tem_file, 0, 0, 0, 0, ($this->resize_height*$ratio),$this->resize_height, $this->width, $this->height);
		  }
		}

		//输出新图片
		if($this->type == 'jpeg' || $this->type == 'jpg'){
			imagejpeg($newimg,$this->des_file);
		}elseif($this->type == 'gif'){
			imagegif($newimg,$this->des_file);
		}elseif($this->type == 'png'){
			imagepng($newimg,$this->des_file);
		}elseif($this->type == 'bmp'){
			imagebmp($newimg,$this->des_file);//bmp.php中包含
		}

	}#function new_img() end

}#end class
精彩图集

赞助商链接