JAVA使用Jcrop做图片裁剪上传
来源:互联网 发布:软件科技成果鉴定证书 编辑:程序博客网 时间:2024/05/22 07:57
首先需要引用三个JS文件
<link rel="stylesheet" href="Jcrop/jquery.Jcrop.css"><script src="Jcrop/jquery-2.2.3.js"></script><script src="Jcrop/jquery.Jcrop.js"></script>
然后页面上下面的JS代码是在选择图片的时候通过AJAX上传图片,这里需要注意的是Jquery必须使用2.0以上的版本,否则后台就收不到文件
<script type="text/javascript">//图片上传的onchange事件,用于上传并回显图片function uploadImg() { var formData = new FormData($( "#uploadForm" )[0]); $.ajax({ url: '${pageContext.request.contextPath}/uploadImag.do' , type: 'POST', data: formData, async: false, cache: false, contentType: false, processData: false, success: function (returndata) { var json=eval("("+returndata+")"); var cropboxdiv=$('#cropboxdiv');//图片回显区域 $('#cropboxdiv').empty(); $("<img id='cropbox' src='"+json.path+"/"+json.fileName+"'>").appendTo(cropboxdiv); $('#imgPath').val(json.path+"/"+json.fileName); $('#srcPath').val(json.path); $('#fileName').val(json.fileName); $('#cropbox').Jcrop({//初始化Jcrop图片裁剪器 maxSize : [ 150, 170 ], minSize: [135,135], onSelect : function(c){//图片选择事件 $('#x').val(c.x); $('#y').val(c.y); $('#w').val(c.w); $('#h').val(c.h); } }); } }); }//图片裁剪区域选好之后,交给java后台进行裁剪function cutImg(){$.ajax({ type:"post", url:"${pageContext.request.contextPath}/cutImg.do", cache:false, data:{ x:$('#x').val(), y:$('#y').val(), w:$('#w').val(), h:$('#h').val(), srcPath:$('#srcPath').val(), fileName:$('#fileName').val() },success:function(r){$('#imgPath').val($('#srcPath').val()+"/"+$('#fileName').val());}});}</script>
<body><div id="cropboxdiv"><img id="cropbox" src=""></div><form id= "uploadForm"> <table><tr><a href="javascript:void(0);" class="file">选择文件 <input type="file" name="file" onchange="uploadImg()"></a></tr></table></form><input type="hidden" id="x" /><input type="hidden" id="y" /><input type="hidden" id="w" /> <input type="hidden" id="h" /> <input type="hidden" id="imgPath" /> <input type="hidden" id="srcPath" /> <input type="hidden" id="fileName" /> </body>下面是后台接收前台onchange事件上传的图片,最后将图片的相对路径和文件名封装到一个DTO里面方便传输数据
@RequestMapping("uploadImag")public void uploadImag(@RequestParam(value = "file", required = false) MultipartFile file,HttpServletResponse response, HttpServletRequest request) throws Exception{SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String date = sdf.format(new Date());String path = request.getSession().getServletContext().getRealPath("img" + File.separator + date);String[] postfixs = file.getOriginalFilename().split("\\.");String postfix = postfixs[postfixs.length - 1];String fileName = new Date().getTime() + "." + postfix;File targetFile = new File(path, fileName);if (!targetFile.exists()) {targetFile.mkdirs();}try {file.transferTo(targetFile);} catch (Exception e) {e.printStackTrace();}imgCutPathDto icp=new imgCutPathDto();icp.setFileName(fileName);icp.setPath(Zealot.SSOIMAGPATH + File.separator+date);WebUtil.print(response,Json.toJson(icp));}这时候原始图片已经回显到了页面,在调用前台的裁剪方法是会访问后台的一个裁剪图片方法,如下
@RequestMapping("cutImg")public void cutImg(HttpServletResponse response, HttpServletRequest request,String x,String y,String w,String h,String srcPath,String fileName){int x1=Integer.parseInt(x);int y1=Integer.parseInt(y);int w1=Integer.parseInt(w);int h1=Integer.parseInt(h);String path = request.getSession().getServletContext().getRealPath("/");CutImg.cutPic(path+srcPath+File.separator+fileName,path+srcPath, x1, y1, w1, h1,fileName);WebUtil.print(response,"yes");}具体裁剪工具类,如下
import java.awt.Rectangle;import java.awt.image.BufferedImage;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.Date;import java.util.Iterator;import javax.imageio.ImageIO;import javax.imageio.ImageReadParam;import javax.imageio.ImageReader;import javax.imageio.stream.ImageInputStream;import org.apache.commons.io.FilenameUtils;public class CutImg {private static final String JPG_HEX = "ff";private static final String PNG_HEX = "89";private static final String JPG_EXT = "jpg";private static final String PNG_EXT = "png";public static String getFileExt(String filePath) { FileInputStream fis = null; String extension = FilenameUtils.getExtension(filePath); try { fis = new FileInputStream(new File(filePath)); byte[] bs = new byte[1]; fis.read(bs); String type = Integer.toHexString(bs[0]&0xFF); if(JPG_HEX.equals(type)) extension = JPG_EXT; if(PNG_HEX.equals(type)) extension = PNG_EXT; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if(fis != null) fis.close(); } catch (IOException e) { e.printStackTrace(); } } return extension;} public static boolean cutPic(String srcFile, String outFile, int x, int y, int width, int height,String fileName) { FileInputStream is = null; ImageInputStream iis = null; try { // 如果源图片不存在 if (!new File(srcFile).exists()) { return false; } // 读取图片文件 is = new FileInputStream(srcFile); // 获取文件格式 String ext =getFileExt(srcFile); //String ext = fileName.substring(fileName.lastIndexOf(".") + 1); // ImageReader声称能够解码指定格式 Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(ext); ImageReader reader = it.next(); // 获取图片流 iis = ImageIO.createImageInputStream(is); // 输入源中的图像将只按顺序读取 reader.setInput(iis, true); // 描述如何对流进行解码 ImageReadParam param = reader.getDefaultReadParam(); // 图片裁剪区域 Rectangle rect = new Rectangle(x, y, width, height); // 提供一个 BufferedImage,将其用作解码像素数据的目标 param.setSourceRegion(rect); // 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象 BufferedImage bi = reader.read(0, param); File tempOutFile = new File(outFile, fileName); File tempOutFileDir = new File(outFile); if (!tempOutFileDir.exists()) { tempOutFileDir.mkdirs(); } tempOutFile.createNewFile(); ImageIO.write(bi, ext, tempOutFile); return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { try { if (is != null) { is.close(); } if (iis != null) { iis.close(); } } catch (IOException e) { e.printStackTrace(); return false; } } } }如此图片裁剪便完成了,原始的图片我在这儿被裁剪后的图片覆盖了,根据之前的上传路径就可以回显裁剪后的图片了
4 0
- JAVA使用Jcrop做图片裁剪上传
- MVC使用JCrop上传、裁剪图片
- 使用jcrop裁剪图片
- ASP.NET使用Jcrop插件实现图片上传裁剪功能
- 使用Jcrop插件裁剪图片并上传(Spring MVC)
- java OSS+jcrop完成图片裁剪上传
- 做了一个上传文件 jquery.uploadify + 图片裁剪 jquery.Jcrop
- Jcrop插件+Canvas实现图片上传预览+图片裁剪上传
- 图片裁剪插件Jcrop.js的使用
- 使用JCrop进行图片裁剪,裁剪js说明,裁剪预览,裁剪上传,裁剪设计的图片处理的工具类和代码
- JAVA servlet无刷新上传图片文件并裁剪demo代码(Jcrop)
- 图片裁剪入门Jcrop
- 图片裁剪 jcrop
- 在线裁剪图片 Jcrop
- struts2+jsp+jquery+Jcrop实现图片裁剪并上传
- jcrop实现图片区域选择、裁剪及上传
- struts2+jsp+jquery+Jcrop实现图片裁剪并上传
- jquery+Jcrop+servlet图片上传裁剪选择保存实例
- ftp上传,加入线程
- usaco2
- Linux学习日志(8)- Linux 编译内核[scripts/kconfig/dochecklxdialog] 错误
- angularjs过滤器(number)
- java实验1-1:求5位数的各位数之和
- JAVA使用Jcrop做图片裁剪上传
- 摄像头采集,264编码,live555直播(1)
- HttpClient +Testng(1)进行接口测试入门
- 转载:白话 IT 之 聊聊数据加密
- 【C#串口编程计划】C#串口协议解析 -- 二进制数据
- Hadoop+Hbase+Spark集群配置—前期准备(免密和jdk配置)
- Nginx下带证书的分向转发
- 磁盘坏道引起的hbase查询错误
- 代码优化2