_path=$path; $this->_paramsArr=array(); $this->_count=0; $this->ossurl = $ossurl; } //唯一的参数,生成小图后是否删除原图? function sizeIt($picdelete='1'){ //到底要生成几个小图 if(isset($_POST['count'])){ $this->_count=intval($_POST['count']); } //post过来的参数保存到自己的私有属性里 for($i=1;$i<=$this->_count;$i++){ $p = array('width'=>$_POST['width'], 'height'=>$_POST['height'], 'x'=>$_POST['x'], 'y'=>$_POST['y'], 'scale'=> $_POST['scale']); //传的img字符串要包括扩展名 if ($this->ossurl != ''){ $p['img'] = str_replace($this->ossurl.'/data', '../data', $_POST['img'.$i]); }else{ $p['img'] = $_POST['img'.$i]; } $this->_paramsArr[$i-1] = $p; } //trace($this->_paramsArr); //依次生成每个小图 if(!file_exists($this->_path)){ @mkdir($this->_path,0777,true); } $idx=0; foreach($this->_paramsArr as $key=>$value){ $idx++; $parts=explode('.',$value['img']); $t_name[$idx] = $this->resizeThumbnailImage(//目前的算法是小图在大图文件名后加'_number',比如xxx.jpg的第二种小图是xxx_2.jpg $this->_path.(time().rand(100,999)).'_'.$idx.'.'.end($parts), $value['img'], $value['width'], $value['height'], $value['x'], $value['y'], $value['scale']); } if($picdelete=='1') { $deleteImg = $this->_path.end(explode('/',$_POST['img1'])); $pictype=getimagesize($deleteImg); if($pictype[2]=='1' || $pictype[2]=='2' || $pictype[2]=='3') { @unlink($deleteImg); } }elseif($picdelete=='2' && $idx=='1'){ $t_name[2] = $_POST['img1']; } return $t_name; } //预览后,实际调整图片大小的函数 function resizeThumbnailImage( $thumb_image_name, //小图文件名,包括路径 $image, //要剪裁的文件名,包括路径 $width, //要切多宽 $height, //要切多长 $start_width, //开始切图的x坐标点 $start_height, //开始切图的y坐标点 $scale //缩放比例 ) { list($imagewidth, $imageheight, $imageType) = getimagesize($image); $imageType = image_type_to_mime_type($imageType); $newImageWidth = ceil($width * $scale); $newImageHeight = ceil($height * $scale); //$newImage = imagecreatetruecolor($newImageWidth,$newImageHeight); switch($imageType) { case "image/gif": $source=imagecreatefromgif($image); break; case "image/pjpeg": case "image/jpeg": case "image/jpg": $source=imagecreatefromjpeg($image); break; case "image/png": case "image/x-png": $source=imagecreatefrompng($image); break; } //imagecopyresampled($newImage,$source,0,0,$start_width,$start_height,$newImageWidth,$newImageHeight,$width,$height); //GD2.0.1 if (function_exists("imagecreatetruecolor")){ $newImage = imagecreatetruecolor($newImageWidth, $newImageHeight); if(in_array($imageType, array('image/gif', 'image/png', 'image/x-png'))){ $color = imagecolorallocate($newImage,255,255,255); imagecolortransparent($newImage,$color); imagefill($newImage,0,0,$color); } ImageCopyResampled($newImage, $source, 0, 0, $start_width, $start_height, $newImageWidth, $newImageHeight, $width, $height); }else{ $newImage = imagecreate($newImageWidth, $newImageHeight); if(in_array($imageType, array('image/gif', 'image/png', 'image/x-png'))){ $color = imagecolorallocate($newImage,255,255,255); imagecolortransparent($newImage,$color); imagefill($newImage,0,0,$color); } ImageCopyResized($newImage, $source, 0, 0, $start_width, $start_height, $newImageWidth, $newImageHeight, $width, $height); } switch($imageType) { case "image/gif": imagegif($newImage,$thumb_image_name); break; case "image/pjpeg": case "image/jpeg": case "image/jpg": imagejpeg($newImage,$thumb_image_name,90); break; case "image/png": case "image/x-png": imagepng($newImage,$thumb_image_name); break; } chmod($thumb_image_name, 0666); return $thumb_image_name; } //========================================== // 函数: waterMarkimg($destination,$image_size,$destination_folder) // 功能: 给图片加水印 // 参数: $destination 图片文件名 // 参数: $image_size 大小数组(包含二个字符串) //destination_folder文件存放路径 // 返回: 1 成功 成功时返回生成的图片路径 //========================================== function waterMarkimg($destination) { global $config; $waterimg = APP_PATH.$config['sy_watermark']; $image_size = getimagesize($destination); $iinfo=getimagesize($destination,$iinfo);//取得GIF、JPEG、PNG或SWF图形的大小 $iinfo2=getimagesize($waterimg,$iinfo2);//取得GIF、JPEG、PNG或SWF水印图形的大小 $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);//建立一个新的图形 $white=imagecolorallocate($nimage,255,255,255);//分配图形的颜色 $black=imagecolorallocate($nimage,0,0,0);//分配图形的颜色 $red=imagecolorallocate($nimage,255,0,0);//分配图形的颜色 imagefill($nimage,0,0,$white);//将图形着色 switch ($iinfo[2]) { case 1: $simage =imagecreatefromgif($destination);//从文件或URL建立一个新的图形 break; case 2: $simage =imagecreatefromjpeg($destination); break; case 3: $simage =imagecreatefrompng($destination); break; case 6: $simage =imagecreatefromwbmp($destination); break; default:$this->errorType=5;//不支持的文件类型 return; } imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]); // imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);//建立一个矩形并且填满颜色 switch ($iinfo2[2]){ case 1: $simage1 =imagecreatefromgif($waterimg); break; case 2: $simage1 =imagecreatefromjpeg($waterimg); break; case 3: $simage1 =imagecreatefrompng($waterimg); break; case 6: $simage1 =imagecreatefromwbmp($waterimg); break; default: $this->errorType=6;//不支持的水印文件类型 return; } $gifsize=getimagesize($waterimg);//取得GIF、JPEG、PNG或SWF图形的大小 switch($config['wmark_position']){//水印位置 case 1:// 上左 imagecopy($nimage,$simage1,0,0,0,0,$gifsize[0],$gifsize[1]); // 左下 break; case 2:// 上中 imagecopy($nimage,$simage1,($image_size[0]-$gifsize[0])/2,0,0,0,$gifsize[0],$gifsize[1]); // 左下 break; case 3:// 右上 imagecopy($nimage,$simage1,$image_size[0]-$gifsize[0],0,0,0,$gifsize[0],$gifsize[1]); break; case 4:// 中左 imagecopy($nimage,$simage1,0,($image_size[1]-$gifsize[1])/2,0,0,$gifsize[0],$gifsize[1]); // 左下 break; case 5:// 居中 imagecopy($nimage,$simage1,($image_size[0]-$gifsize[0])/2, ($image_size[1]-$gifsize[1])/2,0,0,$gifsize[0],$gifsize[1]); break; case 6:// 中右 imagecopy($nimage,$simage1,$image_size[0]-$gifsize[0],($image_size[1]-$gifsize[1])/2,0,0,$gifsize[0],$gifsize[1]); // 左下 break; case 9:// 右下 imagecopy($nimage,$simage1,$image_size[0]-$gifsize[0], $image_size[1]-$gifsize[1],0,0,$gifsize[0],$gifsize[1]); break; case 7:// 左下 imagecopy($nimage,$simage1,0,$image_size[1]-$gifsize[1],0,0,$gifsize[0],$gifsize[1]); // 左下 break; case 8:// 底中 imagecopy($nimage,$simage1,($image_size[0]-$gifsize[0])/2,$image_size[1]-$gifsize[1],0,0,$gifsize[0],$gifsize[1]); // 左下 break; } imagedestroy($simage1);// 结束图形 switch ($iinfo[2]){ case 1: imagejpeg($nimage, $destination); break; case 2: imagejpeg($nimage, $destination); break; case 3: imagepng($nimage, $destination); break; case 6: imagewbmp($nimage, $destination); break; } //覆盖原上传文件 imagedestroy($nimage);// 结束图形 imagedestroy($simage);// 结束图形 return $destination; } } ?>