imgareaselect+java实现图片裁剪保存

jopen 10年前

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();                }            }                }