1、需求包:
jquery.imgareaselect.js
jquery.imgareaselect.pack.js
jquery-1.6.1.min.js
ajaxfileupload-min.js
json-lib-2.3-jdk15.jar
commons-fileupload-1.2.2.jar
2、前端页面
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title></title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <link href="css/imgareaselect-default.css" rel="stylesheet" type="text/css" />
- <script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
- <script type="text/javascript" src="js/ajaxfileupload-min.js"></script>
- <script type="text/javascript" src="js/jquery.imgareaselect.min.js"></script>
- <script type="text/javascript" src="js/jquery.imgareaselect.pack.js"></script>
- <script type="text/javascript" src="js/upload.js"></script>
- </head>
- <body>
- <input type="hidden" name="x1" value="0" />
- <input type="hidden" name="y1" value="0" />
- <input type="hidden" name="x2" value="100" />
- <input type="hidden" name="y2" value="100" />
- <input id="fileToUpload" name="fileToUpload" type="file" onchange="uploadImage();"/>
- <div id="facediv" style="display:none;z-index:100;">
- <img id="face" />
- </div>
- </body>
- </html>
- function uploadImage() {
- $.ajaxFileUpload( {
- url : 'photo',// 需要链接到服务器地址
- fileElementId : 'fileToUpload',// 文件选择框的id属性
- dataType : 'json',// 服务器返回的格式,可以是json
- data : {"operation":1},
- success : function(data) {
- if (data['result'] == 1) {
- $("#facediv").css({"display":"block"});
- $("#face").attr("src",data['path']);
- $('<div><img src="' + data['path'] + '" style="position: relative;" /><div>')
- .css({
- float: 'left',
- position: 'relative',
- overflow: 'hidden',
- width: '100px',
- height: '100px'
- }).insertAfter($('#face'));
- $('<button id="btnSubmit">提交</button>')
- .click(function (){
- cutImage(data['path']);
- }).insertAfter($('#facediv'));
- $('#face').imgAreaSelect({
- maxWidth: 100, maxHeight: 100,
- minWidth: 63, minHeight:63,
- x1:0,y1:0,x2:100,y2:100,
- aspectRatio: '1:1',
- onSelectChange: function (img, selection) {
- var scaleX = 100 / (selection.width || 1);
- var scaleY = 100 / (selection.height || 1);
- $('#face + div > img').css({
- width: Math.round(scaleX * 400) + 'px',
- height: Math.round(scaleY * 300) + 'px',
- marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',
- marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'
- });
- },
- onSelectEnd: function (img, selection) {
- $('input[name="x1"]').val(selection.x1);
- $('input[name="y1"]').val(selection.y1);
- $('input[name="x2"]').val(selection.x2);
- $('input[name="y2"]').val(selection.y2);
- }
- });
- }
- },
- error : function(data) {
- }
- });
- }
- function cutImage(path) {
- $.ajax( {
- type : "POST",
- url:"photo",
- dateType:"json",
- data:{"operation":2,"x1":$('input[name="x1"]').val(),
- "x2":$('input[name="x2"]').val(),
- "y1":$('input[name="y1"]').val(),
- "y2":$('input[name="y2"]').val(),
- "path":path},
- success : function(data) {
- top.location.href="photo_view.vm?path="+data["path"];
- },
- error:function(data) {
- }
- });
- }
3、后台处理:
- public class PhotoServlet extends HttpServlet {
- private static final long serialVersionUID = 5653610348191435218L;
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse resp)
- throws ServletException, IOException {
- String requestType = request.getContentType();
- if (requestType != null && requestType.indexOf("multipart/form-data") != -1) {
- FileItemFactory factory = new DiskFileItemFactory();
- ServletFileUpload upload = new ServletFileUpload(factory);
- List items;
- try {
- items = upload.parseRequest(request);
- Iterator iter = items.iterator();
- String webRoot = request.getSession().getServletContext()
- .getRealPath("/");
- while (iter.hasNext()) {
- FileItem item = (FileItem) iter.next();
- if (!item.isFormField()) {
- String suffix = item.getName().substring(item.getName().lastIndexOf("."));
- String name = String.valueOf(System.currentTimeMillis());
- StringBuffer sourcePath = new StringBuffer();
- sourcePath.append(webRoot);
- sourcePath.append(File.separator);
- sourcePath.append("tmp");
- sourcePath.append(File.separator);
- sourcePath.append(name);
- sourcePath.append("_source");
- sourcePath.append(suffix);
- File imageFile= new File(sourcePath.toString());
- if (!imageFile.getParentFile().exists()) {
- imageFile.getParentFile().mkdirs();
- }
- item.write(imageFile);
- JSONObject result = new JSONObject();
- result.put("result", 1);
- result.put("path", "http://localhost:8080/testxml/tmp/" + imageFile.getName());
- this.responseJSON(resp, result.toString());
- break;
- }
- }
- } catch (FileUploadException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- } else {
- Integer x1 = Integer.parseInt(request.getParameter("x1"));
- Integer y1 = Integer.parseInt(request.getParameter("y1"));
- Integer x2 = Integer.parseInt(request.getParameter("x2"));
- Integer y2 = Integer.parseInt(request.getParameter("y2"));
- String path = request.getParameter("path");
- String fileName = path.substring(path.lastIndexOf("/")+1);
- String suffix = fileName.substring(fileName.lastIndexOf("."));
- String webRoot = request.getSession().getServletContext().getRealPath("/");
- StringBuffer sourcePath = new StringBuffer();
- sourcePath.append(webRoot);
- sourcePath.append(File.separator);
- sourcePath.append("tmp");
- sourcePath.append(File.separator);
- sourcePath.append(fileName);
- StringBuffer targetPath = new StringBuffer();
- targetPath.append(webRoot);
- targetPath.append(File.separator);
- targetPath.append("tmp");
- targetPath.append(File.separator);
- targetPath.append(fileName.substring(0, fileName.lastIndexOf("_")));
- targetPath.append(suffix);
- cutImage(suffix.substring(1), sourcePath.toString(), targetPath.toString(),
- x1, y1, x2, y2);
- new File(sourcePath.toString()).delete();
- JSONObject result = new JSONObject();
- result.put("result", 1);
- result.put("path", "http://localhost:8080/testxml/tmp/" + fileName.substring(0, fileName.lastIndexOf("_")) + suffix);
- resp.setContentType("application/json");
- this.responseJSON(resp, result.toString());
- }
- }
- protected void responseJSON(HttpServletResponse response, String jsonStr) {
- response.setCharacterEncoding("utf-8");
- PrintWriter writer;
- try {
- writer = response.getWriter();
- writer.write(jsonStr);
- writer.flush();
- } catch (IOException e) {
- }
- }
- public static void cutImage(String suffix, String sourcePath, String targetPath,
- int x1, int y1, int x2, int y2) {
- try {
- Image img;
- ImageFilter cropFilter;
- File sourceImgFile = new File(sourcePath);
- BufferedImage bi = ImageIO.read(sourceImgFile);
- int srcWidth = bi.getWidth();
- int srcHeight = bi.getHeight();
- int destWidth = x2 - x1;
- int destHeight = y2 - y1;
- if (srcWidth >= destWidth && srcHeight >= destHeight) {
- Image image = bi.getScaledInstance(srcWidth, srcHeight,
- Image.SCALE_DEFAULT);
- cropFilter = new CropImageFilter(x1, y1, destWidth, destHeight);
- img = Toolkit.getDefaultToolkit().createImage(
- new FilteredImageSource(image.getSource(), cropFilter));
- BufferedImage tag = new BufferedImage(destWidth, destHeight,
- BufferedImage.TYPE_INT_RGB);
- Graphics g = tag.getGraphics();
- g.drawImage(img, 0, 0, null);
- g.dispose();
- ImageIO.write(tag, suffix, new File(targetPath));
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }