常用的php图片处理类(水印、等比缩放、固定高宽)分享
常用的php图片处理类(水印、等比缩放、固定高宽)分享
<?php //PHP添加水印&比例缩略图&固定高度&固定宽度类。 classImage_process{ public$source;//原图 public$source_width;//原图宽度 public$source_height;//原图高度 public$source_type_id; public$orign_name; public$orign_dirname; //传入原图路径 publicfunction__construct($source){ $this->typeList=array(1=>'gif',2=>'jpg',3=>'png'); $ginfo=getimagesize($source); $this->source_width=$ginfo[0]; $this->source_height=$ginfo[1]; $this->source_type_id=$ginfo[2]; $this->orign_url=$source; $this->orign_name=basename($source); $this->orign_dirname=dirname($source); } //判断图片的文件的格式,返回PHP可识别的编码 publicfunctionjudgeType($type,$source){ if($type==1){ returnimagecreatefromgif($source);//gif }elseif($type==2){ returnimagecreatefromjpeg($source);//jpg }elseif($type==3){ returnimagecreatefrompng($source);//png }else{ returnfalse; } } //生成水印图片 publicfunctionwaterMakeImage($logo){ $linfo=getimagesize($logo); $logo_width=$linfo[0]; $logo_height=$linfo[1]; $logo_type_id=$linfo[2]; $sourceHandle=$this->judgeType($this->source_type_id,$this->orign_url); $logoHandle=$this->judgeType($logo_type_id,$logo); if(!$sourceHandle||!$logoHandle){ returnfalse; } $x=($this->source_width-$logo_width)/2; $y=($this->source_height-$logo_height)/2; imagecopy($sourceHandle,$logoHandle,$x,$y,0,0,$logo_width,$logo_height); $newPic=$this->orign_dirname.'\water_'.time().'.'.$this->typeList[$this->source_type_id]; if($this->saveImage($sourceHandle,$newPic)){ imagedestroy($sourceHandle); imagedestroy($logoHandle); } } //固定高度宽度 publicfunctionfixSizeImage($width,$height){ if($width>$this->source_width)$this->source_width; if($height>$this->source_height)$this->source_height; if($width===false){ $width=floor($this->source_width/($this->source_height/$height)); } if($height===false){ $height=floor($this->source_height/($this->source_width/$width)); } $this->tinyImage($width,$height); } //等比例缩放图片 publicfunctionscaleImage($scale){ $width=floor($this->source_width*$scale); $height=floor($this->source_height*$scale); $this->tinyImage($width,$height); } //创建缩略图 publicfunctiontinyImage($width,$height){ $tinyImage=imagecreatetruecolor($width,$height); $handle=$this->judgeType($this->source_type_id,$this->orign_url); if(function_exists('imagecopyresampled')){ imagecopyresampled($tinyImage,$handle,0,0,0,0,$width,$height,$this->source_width,$this->source_height); }else{ imagecopyresized($tinyImage,$handle,0,0,0,0,$width,$height,$this->source_width,$this->source_height); } $newPic=$this->orign_dirname.'\thumb_'.time().'_'.$width."_".$height.".".$this->typeList[$this->source_type_id]; if($this->saveImage($tinyImage,$newPic)){ imagedestroy($tinyImage); imagedestroy($handle); } } //保存图片 privatefunctionsaveImage($image,$url){ if(imagejpeg($image,$url)){ returntrue; } } } $imgHandle=newImage_process('D:\AppServ\www\test\getimg\14061907445601.jpg'); //$imgHandle->waterMakeImage('D:\AppServ\www\test\getimg\shougongke.png');//生成水印图片 //$imgHandle->fixSizeImage(200,150);//固定长度图片 $imgHandle->scaleImage(0.2);//等比例缩放 ?>
示例二:
<?php /** * *图像处理类 *@authorFC_LAMP *@internal功能包含:水印,缩略图 */ classImg { //图片格式 private$exts=array('jpg','jpeg','gif','bmp','png'); /** * * *@throwsException */ publicfunction__construct() { if(!function_exists('gd_info')) { thrownewException('加载GD库失败!'); } } /** * *裁剪压缩 *@param$src_img图片 *@param$save_img生成后的图片 *@param$option参数选项,包括:$maxwidth宽$maxheight高 *array('width'=>xx,'height'=>xxx) *@internal *我们一般的压缩图片方法,在图片过长或过宽时生成的图片 *都会被“压扁”,针对这个应采用先裁剪后按比例压缩的方法 */ publicfunctionthumb_img($src_img,$save_img='',$option) { if(empty($option['width'])orempty($option['height'])) { returnarray('flag'=>False,'msg'=>'原图长度与宽度不能小于0'); } $org_ext=$this->is_img($src_img); if(!$org_ext['flag']) { return$org_ext; } //如果有保存路径,则确定路径是否正确 if(!empty($save_img)) { $f=$this->check_dir($save_img); if(!$f['flag']) { return$f; } } //获取出相应的方法 $org_funcs=$this->get_img_funcs($org_ext['msg']); //获取原大小 $source=$org_funcs['create_func']($src_img); $src_w=imagesx($source); $src_h=imagesy($source); //调整原始图像(保持图片原形状裁剪图像) $dst_scale=$option['height']/$option['width'];//目标图像长宽比 $src_scale=$src_h/$src_w;//原图长宽比 if($src_scale>=$dst_scale) {//过高 $w=intval($src_w); $h=intval($dst_scale*$w); $x=0; $y=($src_h-$h)/3; }else {//过宽 $h=intval($src_h); $w=intval($h/$dst_scale); $x=($src_w-$w)/2; $y=0; } //剪裁 $croped=imagecreatetruecolor($w,$h); imagecopy($croped,$source,0,0,$x,$y,$src_w,$src_h); //缩放 $scale=$option['width']/$w; $target=imagecreatetruecolor($option['width'],$option['height']); $final_w=intval($w*$scale); $final_h=intval($h*$scale); imagecopyresampled($target,$croped,0,0,0,0,$final_w,$final_h,$w,$h); imagedestroy($croped); //输出(保存)图片 if(!empty($save_img)) { $org_funcs['save_func']($target,$save_img); }else { header($org_funcs['header']); $org_funcs['save_func']($target); } imagedestroy($target); returnarray('flag'=>True,'msg'=>''); } /** * *等比例缩放图像 *@param$src_img原图片 *@param$save_img需要保存的地方 *@param$option参数设置array('width'=>xx,'height'=>xxx) * */ functionresize_image($src_img,$save_img='',$option) { $org_ext=$this->is_img($src_img); if(!$org_ext['flag']) { return$org_ext; } //如果有保存路径,则确定路径是否正确 if(!empty($save_img)) { $f=$this->check_dir($save_img); if(!$f['flag']) { return$f; } } //获取出相应的方法 $org_funcs=$this->get_img_funcs($org_ext['msg']); //获取原大小 $source=$org_funcs['create_func']($src_img); $src_w=imagesx($source); $src_h=imagesy($source); if(($option['width']&&$src_w>$option['width'])||($option['height']&&$src_h>$option['height'])) { if($option['width']&&$src_w>$option['width']) { $widthratio=$option['width']/$src_w; $resizewidth_tag=true; } if($option['height']&&$src_h>$option['height']) { $heightratio=$option['height']/$src_h; $resizeheight_tag=true; } if($resizewidth_tag&&$resizeheight_tag) { if($widthratio<$heightratio) $ratio=$widthratio; else $ratio=$heightratio; } if($resizewidth_tag&&!$resizeheight_tag) $ratio=$widthratio; if($resizeheight_tag&&!$resizewidth_tag) $ratio=$heightratio; $newwidth=$src_w*$ratio; $newheight=$src_h*$ratio; if(function_exists("imagecopyresampled")) { $newim=imagecreatetruecolor($newwidth,$newheight); imagecopyresampled($newim,$source,0,0,0,0,$newwidth,$newheight,$src_w,$src_h); }else { $newim=imagecreate($newwidth,$newheight); imagecopyresized($newim,$source,0,0,0,0,$newwidth,$newheight,$src_w,$src_h); } } //输出(保存)图片 if(!empty($save_img)) { $org_funcs['save_func']($newim,$save_img); }else { header($org_funcs['header']); $org_funcs['save_func']($newim); } imagedestroy($newim); returnarray('flag'=>True,'msg'=>''); } /** * *生成水印图片 *@param$org_img原图像 *@param$mark_img水印标记图像 *@param$save_img当其目录不存在时,会试着创建目录 *@paramarray$option为水印的一些基本设置包含: *x:水印的水平位置,默认为减去水印图宽度后的值 *y:水印的垂直位置,默认为减去水印图高度后的值 *alpha:alpha值(控制透明度),默认为50 */ publicfunctionwater_mark($org_img,$mark_img,$save_img='',$option=array()) { //检查图片 $org_ext=$this->is_img($org_img); if(!$org_ext['flag']) { return$org_ext; } $mark_ext=$this->is_img($mark_img); if(!$mark_ext['flag']) { return$mark_ext; } //如果有保存路径,则确定路径是否正确 if(!empty($save_img)) { $f=$this->check_dir($save_img); if(!$f['flag']) { return$f; } } //获取相应画布 $org_funcs=$this->get_img_funcs($org_ext['msg']); $org_img_im=$org_funcs['create_func']($org_img); $mark_funcs=$this->get_img_funcs($mark_ext['msg']); $mark_img_im=$mark_funcs['create_func']($mark_img); //拷贝水印图片坐标 $mark_img_im_x=0; $mark_img_im_y=0; //拷贝水印图片高宽 $mark_img_w=imagesx($mark_img_im); $mark_img_h=imagesy($mark_img_im); $org_img_w=imagesx($org_img_im); $org_img_h=imagesx($org_img_im); //合成生成点坐标 $x=$org_img_w-$mark_img_w; $org_img_im_x=isset($option['x'])?$option['x']:$x; $org_img_im_x=($org_img_im_x>$org_img_wor$org_img_im_x<0)?$x:$org_img_im_x; $y=$org_img_h-$mark_img_h; $org_img_im_y=isset($option['y'])?$option['y']:$y; $org_img_im_y=($org_img_im_y>$org_img_hor$org_img_im_y<0)?$y:$org_img_im_y; //alpha $alpha=isset($option['alpha'])?$option['alpha']:50; $alpha=($alpha>100or$alpha<0)?50:$alpha; //合并图片 imagecopymerge($org_img_im,$mark_img_im,$org_img_im_x,$org_img_im_y,$mark_img_im_x,$mark_img_im_y,$mark_img_w,$mark_img_h,$alpha); //输出(保存)图片 if(!empty($save_img)) { $org_funcs['save_func']($org_img_im,$save_img); }else { header($org_funcs['header']); $org_funcs['save_func']($org_img_im); } //销毁画布 imagedestroy($org_img_im); imagedestroy($mark_img_im); returnarray('flag'=>True,'msg'=>''); } /** * *检查图片 *@paramunknown_type$img_path *@returnarray('flag'=>true/false,'msg'=>ext/错误信息) */ privatefunctionis_img($img_path) { if(!file_exists($img_path)) { returnarray('flag'=>False,'msg'=>"加载图片$img_path失败!"); } $ext=explode('.',$img_path); $ext=strtolower(end($ext)); if(!in_array($ext,$this->exts)) { returnarray('flag'=>False,'msg'=>"图片$img_path格式不正确!"); } returnarray('flag'=>True,'msg'=>$ext); } /** * *返回正确的图片函数 *@paramunknown_type$ext */ privatefunctionget_img_funcs($ext) { //选择 switch($ext) { case'jpg': $header='Content-Type:image/jpeg'; $createfunc='imagecreatefromjpeg'; $savefunc='imagejpeg'; break; case'jpeg': $header='Content-Type:image/jpeg'; $createfunc='imagecreatefromjpeg'; $savefunc='imagejpeg'; break; case'gif': $header='Content-Type:image/gif'; $createfunc='imagecreatefromgif'; $savefunc='imagegif'; break; case'bmp': $header='Content-Type:image/bmp'; $createfunc='imagecreatefrombmp'; $savefunc='imagebmp'; break; default: $header='Content-Type:image/png'; $createfunc='imagecreatefrompng'; $savefunc='imagepng'; } returnarray('save_func'=>$savefunc,'create_func'=>$createfunc,'header'=>$header); } /** * *检查并试着创建目录 *@param$save_img */ privatefunctioncheck_dir($save_img) { $dir=dirname($save_img); if(!is_dir($dir)) { if(!mkdir($dir,0777,true)) { returnarray('flag'=>False,'msg'=>"图片保存目录$dir无法创建!"); } } returnarray('flag'=>True,'msg'=>''); } } if(!empty($_FILES['test']['tmp_name'])) { //例子 $img=newImg(); //原图 $name=explode('.',$_FILES['test']['name']); $org_img='D:/test.'.end($name); move_uploaded_file($_FILES['test']['tmp_name'],$org_img); $option=array('width'=>$_POST['width'],'height'=>$_POST['height']); if($_POST['type']==1) { $s=$img->resize_image($org_img,'',$option); }else { $img->thumb_img($org_img,'',$option); } unlink($org_img); }
以上所述就是本文的全部内容了,希望大家能够喜欢。