我自己写的自动生成缩略图的程序希望对你有用 /** * 获得图像的缩略图 * @name get_minImg_class.php * *@调用方法$minImg=new getMinImg('文件名--要在服务器上',$thum);$thum为数组有$thum ['height'],$thum['width'] *$minImg->getAndSaveImg() **/ class getMinImg{ public $imgSize=array();//存储img尺寸数组$imgSize['width'],$imgSize['height'] public $thum=array();//缩略图数组$thum['width'],$thum['height'] public $newImgSize=array();//生成新图片的大小$newImgSize['width'],$newImgSize['height'] private $imgfunc;//调用的图片函数名 private $handle;//文件句柄 public $filename;//文件名 public $imgInfo=array();//文件信息$imgInfo[0]代表文件路径及名称(无后缀),$imgInfo[1]代表文件类型 private $newHandle;//新的文件句柄
function __construct($filename,$thum=array('width'=>150,'height'=>100)){ $this->filename=$filename; if(!(boolean)$this->filename){ return false;} $this->thum=$thum; $this->getImgType(); $this->getHandle(); $this->getImgSize(); $this->getNewImgSize(); } private function getHandle(){//获得文件句柄 switch ($this->imgInfo[1]) { case 'jpg': $this->handle=imagecreatefromjpeg($this->filename); $this->imgfunc="imagejpeg"; break; case 'jpeg': $this->handle=imagecreatefromjpeg($this->filename); $this->imgfunc="imagejpeg"; break; case 'png': $this->handle=imagecreatefrompng($this->filename); $this->imgfunc="imagepng"; break; case 'gif': $this->handle=imagecreatefromgif($this->filename); $this->imgfunc="imagegif"; break;
default:$this->handle=imagecreatefromjpeg($this->filename); $this->imgfunc="imagejpeg"; break; } } public function getImgType(){//获得图像的类型 $ext=array(); $ext=explode(".", $this->filename); $this->imgInfo=$ext; }
public function getImgSize(){//获得图像大小 $imgSize=array(); $arr=getimagesize($this->filename); $imgSize['width']=$arr[0]; $imgSize['height']=$arr[1]; //var_dump($imgSize); $this->imgSize=$imgSize; }
function scal_pic($file_name,$file_new){
//验证参数
if(!is_string($file_name) || !is_string($file_new)){
return false;
}
//获取图片信息
$pic_scal_arr = @getimagesize($file_name);
if(!$pic_scal_arr){
return false;
}
//获取图象标识符
$pic_creat = '';
switch($pic_scal_arr['mime']){
case 'image/jpeg':
$pic_creat = @imagecreatefromjpeg($file_name);
break;
case 'image/gif':
$pic_creat = @imagecreatefromgif($file_name);
break;
case 'image/png':
$pic_creat = @imagecreatefrompng($file_name);
break;
case 'image/wbmp':
$pic_creat = @imagecreatefromwbmp($file_name);
break;
default:
return false;
break;
}
if(!$pic_creat){
return false;
}
//判断/计算压缩大小
$max_width = 111;//最大宽度,象素,高度不限制
$min_width = 15;
$min_heigth = 20;
if($pic_scal_arr[0]<$min_width || $pic_scal_arr[1]<$min_heigth){
return false;
}
$re_scal = 0;
if($pic_scal_arr[0]>$max_width){
$re_scal = ($max_width / $pic_scal_arr[0]);
}
$re_width = round($pic_scal_arr[0] * $re_scal);
$re_height = round($pic_scal_arr[1] * $re_scal);
//创建空图象
$new_pic = @imagecreatetruecolor($re_width,$re_height);
if(!$new_pic){
return false;
}
//复制图象
if(!@imagecopyresampled($new_pic,$pic_creat,0,0,0,0,$re_width,$re_height,$pic_scal_arr[0],$pic_scal_arr[1])){
return false;
}
//输出文件
$out_file = '';
switch($pic_scal_arr['mime']){
case 'image/jpeg':
$out_file = @imagejpeg($new_pic,$file_new);
break;
case 'image/jpg':
$out_file = @imagejpeg($new_pic,$file_new);
break;
case 'image/gif':
$out_file = @imagegif($new_pic,$file_new);
break;
case 'image/bmp':
$out_file = @imagebmp($new_pic,$file_new);
break;
default:
return false;
break;
}
if($out_file){
return true;
}else{
return false;
}}以前弄的 希望对你有帮助
如果非要在服务器上面处理大量图片的话,用ImageMagick吧,占用资源比较少
压缩imagejpeg时更改质量。0_0剪裁用imagecopyresampled。
/**
* 获得图像的缩略图
* @name get_minImg_class.php
*
*@调用方法$minImg=new getMinImg('文件名--要在服务器上',$thum);$thum为数组有$thum ['height'],$thum['width']
*$minImg->getAndSaveImg()
**/
class getMinImg{
public $imgSize=array();//存储img尺寸数组$imgSize['width'],$imgSize['height']
public $thum=array();//缩略图数组$thum['width'],$thum['height']
public $newImgSize=array();//生成新图片的大小$newImgSize['width'],$newImgSize['height']
private $imgfunc;//调用的图片函数名
private $handle;//文件句柄
public $filename;//文件名
public $imgInfo=array();//文件信息$imgInfo[0]代表文件路径及名称(无后缀),$imgInfo[1]代表文件类型
private $newHandle;//新的文件句柄
function __construct($filename,$thum=array('width'=>150,'height'=>100)){
$this->filename=$filename;
if(!(boolean)$this->filename){ return false;}
$this->thum=$thum;
$this->getImgType();
$this->getHandle();
$this->getImgSize();
$this->getNewImgSize();
}
private function getHandle(){//获得文件句柄
switch ($this->imgInfo[1]) {
case 'jpg':
$this->handle=imagecreatefromjpeg($this->filename);
$this->imgfunc="imagejpeg";
break;
case 'jpeg':
$this->handle=imagecreatefromjpeg($this->filename);
$this->imgfunc="imagejpeg";
break;
case 'png':
$this->handle=imagecreatefrompng($this->filename);
$this->imgfunc="imagepng";
break;
case 'gif':
$this->handle=imagecreatefromgif($this->filename);
$this->imgfunc="imagegif";
break;
default:$this->handle=imagecreatefromjpeg($this->filename);
$this->imgfunc="imagejpeg";
break;
}
}
public function getImgType(){//获得图像的类型
$ext=array();
$ext=explode(".", $this->filename);
$this->imgInfo=$ext;
}
public function getImgSize(){//获得图像大小
$imgSize=array();
$arr=getimagesize($this->filename);
$imgSize['width']=$arr[0];
$imgSize['height']=$arr[1];
//var_dump($imgSize);
$this->imgSize=$imgSize;
}
public function getNewImgSize(){//获得新图像的大小
$newImgSize=array();
if($this->imgSize['width']>$this->thum['width'] || $this->imgSize['height']>$this->thum['height']){
if($this->imgSize['width']>$this->imgSize['height']){
$newImgSize['width']=$this->thum['width'];
$newImgSize['height']=$this->imgSize['height']*($this->thum['width']/$this->imgSize['width']);
}
if($this->imgSize['height']>$this->imgSize['width']){
$newImgSize['height']=$this->thum['height'];;
$newImgSize['width']=$this->imgSize['width']*($this->thum['height']/$this->imgSize['height']);
}
if($this->imgSize['height']===$this->imgSize['width']){
$newImgSize['height']=$this->thum['height'];
$newImgSize['width']=$this->thum['width'];
}
//echo "big";
}else{
$newImgSize['height']=$this->imgSize['height'];
$newImgSize['width']=$this->imgSize['width'];
}
$this->newImgSize=$newImgSize;
}
public function getAndSaveImg(){//重新生成图片
$this->newHandle=imagecreatetruecolor($this->newImgSize['width'],$this->newImgSize['height']);
imagecopyresized($this->newHandle, $this->handle, 0, 0, 0, 0, $this->newImgSize['width'], $this->newImgSize['height'], $this->imgSize['width'], $this->imgSize['height']);
call_user_func_array($this->imgfunc,array($this->newHandle,"newImg/0001.png"));//这里的名字你可以自己根据自己的规则来替换,任何格式的都可以
}
function __destruct(){
imagedestroy($this->handle);
imagedestroy($this->newHandle);
}}
//这个东西是自动生成缩略图的,只需要你上传图片就行了,然后把服务器上面的图片路径给他就行了