源码下载地址:http://download.csdn.net/detail/liuguofeng719/8029603 公司直接可以拿来使用 package com.fileupload.rest; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.UUID; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.coobird.thumbnailator.Thumbnails; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; @Controller public class ClipAvatarCotroller { @RequestMapping(value = "/clipUpload") public void clipUpload(HttpServletRequest request, HttpServletResponse response) { String pathString = request.getRealPath("/"); MultipartHttpServletRequest mhr = (MultipartHttpServletRequest) request; MultipartFile file = mhr.getFile("file"); try { byte[] byt = file.getBytes(); File f = new File(pathString + File.separator + "upload"); if (!f.exists()) f.mkdirs(); FileOutputStream fis = new FileOutputStream(f.getPath() + File.separator + file.getOriginalFilename()); fis.write(byt); fis.flush(); fis.close(); response.getOutputStream().print("/upload/" + file.getOriginalFilename()); } catch (IOException e) { e.printStackTrace(); } } @RequestMapping(value = "/crop_form") public void crop_form(HttpServletRequest request, HttpServletResponse response) { int x = Integer.valueOf(request.getParameter("x")); int y = Integer.valueOf(request.getParameter("y")); int w = Integer.valueOf(request.getParameter("w")); int h = Integer.valueOf(request.getParameter("h")); String fileName = request.getParameter("fileName"); String fileString = fileName.substring(fileName.lastIndexOf("\\") + 1); String pathString = request.getRealPath("/"); File f = new File(pathString + File.separator + "clip"); if (!f.exists()) f.mkdirs(); try { File f1 = new File(pathString + File.separator + "upload"); InputStream is = new FileInputStream(f1.getPath() + File.separator + fileString); BufferedImage bufferImage = ImageIO.read(is); //获取原图的宽和高 int srcWidth = bufferImage.getWidth(); int srcHeight = bufferImage.getHeight(); //X*原图宽/显示需要展示图片框的宽 //Y*原图高/显示需要展示图片框的高 //W*原图宽/显示需要展示图片框的宽 //H*原图高/显示需要展示图片框的高 //400 * 270 // <div class="bigImg" style="float: left;"> // <img id="srcImg" src="" width="400px" height="270px" /> // </div> int x1 = x * srcWidth / 400; int y1 = y * srcHeight / 270; int w1 = w * srcWidth / 400; int h1 = h * srcHeight / 270; Thumbnails.of(bufferImage).sourceRegion(x1, y1, w1, h1).size(w, h).keepAspectRatio(false).toFile( f.getPath() + File.separator + UUID.randomUUID().toString().replaceAll("-", "") + ".jpg"); } catch (IOException e) { e.printStackTrace(); } } }
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>裁剪Demo</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/jquery.Jcrop.css"> <script src="<%=request.getContextPath()%>/js/jquery.min.js"></script> <script src="<%=request.getContextPath()%>/js/jquery.Jcrop.min.js"></script> <style> .jcrop-holder #preview_box { display: block; position: absolute; z-index: 2000; top: 10px; right: -280px; padding: 6px; border: 1px rgba(0,0,0,.4) solid; background-color: white; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; -webkit-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); -moz-box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); box-shadow: 1px 1px 5px 2px rgba(0, 0, 0, 0.2); } #preview_box .preview-container { width: 200px; height: 200px; overflow: hidden; } </style> <script> var jcrop_api,boundx,boundy; $(function(){ $("#iframe-hidden").bind("load",function(){ var imgpath = $("#iframe-hidden").contents().find("pre").text(); $("#srcImg").attr("src","."+imgpath); $("#previewImg").attr("src","."+imgpath); cutImage(); }); }); //裁剪图像 function cutImage(){ $("#srcImg").Jcrop( { aspectRatio : 1, onChange : showCoords, onSelect : showCoords, minSize :[200,200] },function(){ // Use the API to get the real image size var bounds = this.getBounds(); boundx = bounds[0]; boundy = bounds[1]; // Store the API in the jcrop_api variable jcrop_api = this; // Move the preview into the jcrop container for css positioning //$preview.appendTo(jcrop_api.ui.holder); }); //简单的事件处理程序,响应自onChange,onSelect事件,按照上面的Jcrop调用 function showCoords(obj) { $("#x").val(obj.x); $("#y").val(obj.y); $("#w").val(obj.w); $("#h").val(obj.h); if (parseInt(obj.w) > 0) { //计算预览区域图片缩放的比例,通过计算显示区域的宽度(与高度)与剪裁的宽度(与高度)之比得到 var rx = $("#preview_box .preview-container").width() / obj.w; var ry = $("#preview_box .preview-container").height() / obj.h; //通过比例值控制图片的样式与显示 $("#previewImg").css( { width : Math.round(rx * boundx) + "px", //预览图片宽度为计算比例值与原图片宽度的乘积 height : Math.round(ry * boundy) + "px", //预览图片高度为计算比例值与原图片高度的乘积 marginLeft : "-" + Math.round(rx * obj.x) + "px", marginTop : "-" + Math.round(ry * obj.y) + "px" }); } } } function changeFile(){ var file = $("#fName").val(); $("#fileName").val(file); } </script> </head> <body> <form method="post" action="clipUpload" enctype="multipart/form-data" target="iframe-hidden"> <input type="text" name="name" /> <input type="file" name="file" id="fName" onchange="changeFile(this)"/> <input type="submit" /> </form> <iframe id="iframe-hidden" name="iframe-hidden" style="display:none;"></iframe> <div id="cutImage"> <div class="bigImg" style="float: left;"> <img id="srcImg" src="" width="400px" height="270px" /> </div> <div id="preview_box"> <div class="preview-container"> <img id="previewImg" src="" class="jcrop-preview" alt="Preview" /> </div> </div> <div> <form action="crop_form" method="post" id="crop_form"> <input type="hidden" id="bigImage" name="bigImage" /> <input type="hidden" id="x" name="x" /> <input type="hidden" id="y" name="y" /> <input type="hidden" id="w" name="w" /> <input type="hidden" id="h" name="h" /> <input type="hidden" id="fileName" name="fileName" /> <p> <input type="submit" value="确认" id="crop_submit" /> </p> </form> </div> </div> </body> </html>
源代码下载地址:
相关推荐
本项目以"Spring MVC Thumbnailator + Jcrop 实现头像裁剪"为主题,旨在提供一种高效且直观的用户头像裁剪解决方案。这个项目可以直接应用于你的应用开发中,无需从零开始搭建相关功能。 首先,Spring MVC 是一个...
总的来说,这个项目提供了一个完整的流程,从用户选择并裁剪图片,到使用Struts2和Spring处理上传,再到后端进行实际的图片处理。开发者可以通过学习和实践这个项目,掌握Web应用中的图像上传和处理技术,特别是...
自己通过ajaxfileupload.js结合struts2实现图片上传文件,并通过jcrop和java图像处理功能实现了图片剪切的功能。该功能效果和新浪QQ的头像上传功能效果一样,在ie下可以正常使用 火狐下更换图片时效果样式会走形
在头像上传中,Spring MVC处理HTTP请求,将用户选择的图片数据转发到相应的服务层进行处理,并返回结果。 - **Hibernate**:是一个对象关系映射(ORM)框架,简化了数据库操作。在头像上传的场景下,Hibernate可以...
"Jsp + JCrop 上传头像预览并剪切"是一个基于Java服务器页面(JSP)和JCrop插件的解决方案,它允许用户上传头像并在上传前进行预览和剪裁,从而提供更优质的交互体验。以下将详细介绍这一技术实现的关键知识点。 1....
**Jcrop图片剪切工具详解** Jcrop是一款强大的JavaScript图片裁剪库,它允许用户在前端自由地选择和裁剪图片,广泛应用于网页中的图片预览、上传前的裁剪等场景。这款工具以其直观的用户界面和灵活的配置选项,深受...
2.使用了JCrop插件 3.可以选择背景色 4.控制选择框为1:1的比例 5.设置了选择框的最大范围和最小范围 6.可以支持键盘上下左右箭头移动 7.可以切换图片上传到服务器后截取图片并返回客户端 8.图片上传是无刷新上传的">...
在本项目中,“PHP+jQuery+jCrop裁剪头像”是一个常见的在线图像处理应用场景,用于让用户自定义上传的头像尺寸,以满足特定的显示需求。以下是对该项目中涉及的关键技术点的详细解释: 1. **PHP**:PHP(Hypertext...
最近在项目开发中遇到了这样的需求就是要实现用户上传头像,并且要保存用户裁切后的部分作为用户头像。下面给大家分享node.js(express)中使用Jcrop进行图片剪切上传功能,需要的的朋友参考下吧
在本文中,我们将深入探讨如何使用Jcrop实现剪切上传图片以及相关的操作实例。 首先,Jcrop是基于jQuery库的,因此在使用Jcrop之前,你需要确保你的项目中已经引入了jQuery。你可以通过CDN或者本地文件的方式引入...
使用Jcrop.js和jQuery.form.js,用ImageIO等进行头像上传缩放及裁剪 http://blog.csdn.net/recordme/article/details/42550703
【标题】"基于jquery Jcrop的头像编辑器封装版.zip"是一个压缩包,其中包含了一个使用jQuery库和Jcrop插件实现的头像编辑工具的封装版本。这个工具允许用户在网页上自由裁剪图片,以适应各种应用场景,如个人头像、...
头像的剪切功能可能采用了jQuery的插件,如`cropper.js`或`jcrop`,这些插件能够提供图像的选取和裁剪功能,允许用户自由调整选取区域,然后将裁剪后的图像数据发送到服务器。 在`uploadimage.jsp`页面中,HTML元素...
$('#target').Jcrop({ minSize: [190,190], //边框最小尺寸 //maxSize:[190,190], setSelect: [0,0,170,230], //创建边框参数【x,y,x1,y1】 onChange: updatePreview, //边框改变时发生的事件 onSelect: ...
【Jcrop图片剪切】是一种基于JavaScript的图片裁剪库,它允许用户在网页上自由选择图片的裁剪区域,从而实现自定义的图片尺寸调整。Jcrop是轻量级的,易于集成到任何Web项目中,尤其适用于需要提供用户交互式图片...
`jQuery jCrop` 就是一个这样的工具,它允许用户在上传图片前进行自由裁剪,确保上传的头像符合特定的尺寸要求。 ### 一、jCrop简介 `jCrop` 是一个基于jQuery的图像裁剪插件,它可以与HTML5的`...
6. 用户界面:前端部分需要一个友好的用户界面,让使用者能够方便地选择和裁剪头像。Jcrop提供了丰富的配置选项,可以定制裁剪工具的外观和行为,以适应不同设计需求。 7. 数据持久化:上传的头像通常需要关联到...
本项目结合了这两者,并引入了`jCrop`插件,实现了图片预览、剪切和上传的功能,对于用户友好的图像管理界面有着重要的意义。 `jsp`是基于Java的服务器端脚本语言,它允许开发者在HTML页面中嵌入Java代码,从而动态...
标题中的"jcrop做一个上传头像"指的是使用Jcrop这个JavaScript库来实现用户上传图片并进行裁剪的功能。Jcrop是一款强大的图像裁剪工具,它允许用户在网页前端选择并裁剪图片,然后将裁剪的坐标信息发送到后台服务器...