<?php
/**
* 图片缩略图类,只可以处理'jpg','gif','png'格式
*
* 使用方法:
* $img = new Thumb('./upload/','./thumb/');
* //把当前目录下的a.jpg图片生成缩略图,图片名称为aaa.jpg,图片宽、高最大为100px
* $img->doimage('a.jpg','aaa.jpg',100);
*
*/
class Thumb {
private $bigimagepath;
private $smalllimagepath;
private $imagetype = array('jpg','jpeg','jpe','gif','png');
public function __construct($bigimagepath='./',$smallimagepath='./') {
$this->bigimagepath = $bigimagepath;
$this->smalllimagepath = $smallimagepath;
}
public function image($bigimagepath='./',$smallimagepath='./') {
$this->__construct($bigimagepath,$smallimagepath);
}
public function setbigimagepath($path){
$this->bigimagepath = $path;
}
public function setsmallimagepath($path) {
$this->smalllimagepath = $path;
}
public function doimage($big_filename,$small_filename,$length,$quality=75) {
$big_filename = $this->bigimagepath.$big_filename;
$res = $this->resizeImage($big_filename,$length);
if ($res==false) {
return false;
}
$small_filename = $this->smalllimagepath.$small_filename;
return $this->saveImage($res,$small_filename,$quality);
}
/**
* 根据文件扩展名取得图片的类型或false(表示不是图片)
*
* @param $filename 图片的文件名
*/
private function getImageType($filename) {
$file = pathinfo($filename);
$ext=strtolower($file['extension']);
if (in_array($ext,$this->imagetype))
return $ext;
else return false;
}
/**
* 从给定的文件名创建图片(给定的图片类型只能是jpg、gif或png格式的)
*
* @param $filename 图片文件名
* @return 图片资源
*/
private function imageCreate($filename) {
$type=$this->getImageType($filename);
$p=null; //图片资源
switch ($type) {
case 'jpg':
$p=@imagecreatefromjpeg($filename);
break;
case 'jpeg':
$p=@imagecreatefromjpeg($filename);
break;
case 'jpe':
$p=@imagecreatefromjpeg($filename);
break;
case 'gif':
$p=@imagecreatefromgif($filename);
break;
case 'png':
$p=@imagecreatefrompng($filename);
break;
default:
return false;
break;//只能处理jpg、gif或png格式的图片
}
return $p;
}
/**
* 把图片的长边缩小为length个像素长,短边等比缩小,只能处理jpg、gif、png格式的图片
*
* @param $filename 图片文件名
* @param $length 长边的像素数
*
* @return 图片资源
*/
private function resizeImage($filename,$length) {
$img = $this->imageCreate($filename); //打开源图片
if ($img==false) {
return false;
}
$width=imagesx($img); //宽
$height=imagesy($img); //高
//如果原图片的尺寸比预计的缩略图的尺寸还小,直接返回原图
if ($width<=$length && $height<=$length) {
return $img;
}
//等比缩小
if ($width>$height) {
$w=$length;
$h=($height/$width)*$length;
} else if($width<$height) {
$h=$length;
$w=($width/$height)*$length;
} else {
//正方形的图片
$w=$h=$length;
}
$p=imagecreatetruecolor($w,$h); //新建缩略图
imagecopyresampled($p,$img,0,0,0,0,$w,$h,$width,$height); //缩小
return $p; //返回图片资源
}
/**
* 将图片保存为文件
*
* @param $res 图片资源
* @param string $filename 将要保存的文件名
* @param int $quality 图片质量(0-100)只在生成jpg格式的图片时有效
*
* @return 成功,返回true,否则返回false
*/
private function saveImage($res,$filename,$quality=75) {
//图片类型
$type=self::getImageType($filename);
switch($type) {
case 'jpe':
return @imagejpeg($res,$filename,$quality);
break;
case 'jpeg':
return @imagejpeg($res,$filename,$quality);
break;
case 'jpg':
return @imagejpeg($res,$filename,$quality);
break;
case 'gif':
return @imagegif($res,$filename);
break;
case 'png':
return @imagepng($res,$filename);
break;
default:
return false;
break;
}
return true;
}
}
?>