一、导入 image cropper js和css样式
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/imageCropper/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/imageCropper/assets/css/bootstrap.min.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/imageCropper/dist/cropper.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/imageCropper/main.css">
<script src="${pageContext.request.contextPath }/js/imageCropper/assets/js/jquery.min.js"></script>
<script src="${pageContext.request.contextPath }/js/imageCropper/assets/js/bootstrap.min.js"></script>
<script src="${pageContext.request.contextPath }/js/imageCropper/dist/cropper.js"></script>
<script src="${pageContext.request.contextPath }/js/imageCropper/main.js"></script>
二、截取图片,创建canvas,上传到后台
function getImg(){
var $this = $("#getCroppedCanvasDefined");
var $image = $('#image');
var data = $this.data();
if ($image.data('cropper')) {
data = $.extend({}, data); // Clone a new one
if (typeof data.target !== 'undefined') {
$target = $(data.target);
if (typeof data.option === 'undefined') {
try {
data.option = JSON.parse($target.val());
} catch (e) {
console.log(e.message);
}
}
}
}
var result=$image.cropper("getCroppedCanvas", data.option, data.secondOption);
$('#getCroppedCanvasModal').find('.modal-body').html(result);
var canvas= $("canvas")[0];//拿到剪裁后的数据
var data=canvas.toDataURL(); //转成base64
console.info(data)
$.ajax( {
url:'${pageContext.request.contextPath}/testEditor/testImageCropper.action',
dataType:'json',
type: "POST",
data: {"image":data.toString()},
success: function () {
console.log('Upload success');
},
error: function () {
console.log('Upload error');
}
});
}
三、上传到后台,存储到对应的路径
@RequestMapping(value = "testImageCropper"+ISystemConstant.SUFFIX_ACTION,method=RequestMethod.POST,
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Map<String,Object> testImageCropper(Model model, HttpServletRequest request,HttpServletResponse response){
Map<String,Object> result=new HashMap<String,Object>();
String filePath=pubParamService.getRootPath()+File.separator+"imageCropper"+File.separator;
String fileName=UUID.randomUUID().toString()+".png";
// 参数序列化
String image = request.getParameter("image"); //拿到字符串格式的图片
String PicName=fileName;
System.out.println(PicName);
// 只允许image
String header ="data:image";
String[] imageArr=image.split(",");
if(imageArr[0].contains(header)){//是img的
// 去掉头部
image=imageArr[1];
//image = image.substring(header.length());
// 写入磁盘
String success = "fail";
BASE64Decoder decoder = new BASE64Decoder();
try{
byte[] decodedBytes = decoder.decodeBuffer(image); //将字符串格式的image转为二进制流(biye[])的decodedBytes
String imgFilePath =filePath+PicName; //指定图片要存放的位置
File targetFile = new File(filePath);
if(!targetFile.exists()){
targetFile.mkdirs();
}
FileOutputStream out = new FileOutputStream(imgFilePath); //新建一个文件输出器,并为它指定输出位置imgFilePath
out.write(decodedBytes); //利用文件输出器将二进制格式decodedBytes输出
out.close(); //关闭文件输出器
success = "上传文件成功!";
result.put("success", success);
System.out.println("上传文件成功!");
}catch(Exception e){
result.put("err", e.getMessage());
}
}
return result;
}
四、注意要是传递图片的小大大于2m,可能会出现数据传递不到后台的情况,这个时候请修改tomcat 的server.xml配置,增加maxPostSize=“0”,因为tomcat设置默认的传递的数据大小不能大于2m
https://github.com/fengyuanchen/cropper:image cropper 插件地址