<!-- 文件上传标签,添加class属性CutImage --> <input type="file" /> <!-- 传送图片裁剪比例等参数,要添加class属性imgCoord,ratio为裁剪后要保存的宽高width*height --> <input ratio="100*100" type="hidden"> <!-- 图片预览,要添加class属性showImgDiv,showImgWidth表示预览时的宽度 --> <div showImgWidth="100"></div>
php代码
/*图片上传代码略 下面直接进行图片裁剪*/ /** * [cut_img 图片裁剪函数] * Author: 程威明 * @param array $imgs 图片路径数组 * @param array $info 裁剪信息數組,包括裁剪后要保存的宽高、图片大小与裁剪开始坐标之比 * @param bool $cover 是否覆盖原图,默认不覆盖 * @return array 若覆盖原图返回裁剪数量,不覆盖返回图片路径组成的数组 */ function cut_img($imgs=array(),$infoarr=null,$cover=false) { if($infoarr==null) return $imgs; //判断是否为数组(必须是一个以图片路径组成的数组) $imgs = is_array($imgs)?$imgs:array($imgs); //把多个裁剪信息切成单个信息组成的数组 $infoarr = explode(',', $infoarr); $save_file = array(); $i=0; foreach($imgs as $file){ //如果不覆盖原图,可重新定义图片保存路径 if(false==$cover){ $file = $file; } //把裁剪信息切割成数组,第一个为要保存的宽第二个为要保存的高,第三和第四个为图片宽高与裁剪起点的比例 $info = explode('#', $infoarr[$i]); //裁剪宽高比 $ratio = $info[0]/$info[1]; //判断图片是否存在 if(!file_exists($file)) continue; //获取图片信息 $imgize = getimagesize($file); //图片宽度 $width = $imgize[0]; //图片高度 $height = $imgize[1]; //图片裁剪起点坐标 $x = $info[2]==0?0:$imgize[0]/$info[2]; $y = $info[3]==0?0:$imgize[1]/$info[3]; //判断图片原宽高比与裁剪宽高比的大小 if($width/$height>=$ratio){ $width = $height*$ratio;//如大于即为裁剪宽度 }else{ $height = $width/$ratio;//如小于即为裁剪高度 } //裁剪的寬高不能超出圖片大小 if(($width+$x)>$imgize[0]){ $width = $width-($width+$x-$imgize[0]); } if(($height+$y)>$imgize[1]){ $height = $height-($height+$y-$imgize[1]); } //创建源图的实例 $src = imagecreatefromstring(file_get_contents($file)); //創建一個圖像 $new_image = imagecreatetruecolor($info[0], $info[1]); //分配颜色 $color = imagecolorallocate($new_image,255,255,255); //定义为透明色 imagecolortransparent($new_image,$color); //填充图片 imagefill($new_image,0,0,$color); //拷贝图片并保存成指定大小 imagecopyresized($new_image, $src, 0, 0, $x, $y, $info[0], $info[1], $width, $height); //保存 if(false==$cover){ $file = rtrim(dirname($file),'https://www.jb51.net/').'/c_'.basename($file); $save_file[] = $file; } imagejpeg($new_image,$file); imagedestroy($new_image); imagedestroy($src); $i++; } if(false==$cover){ return $save_file; }else{ return $i; } }