imgareaselect+java實現圖片裁剪保存

jopen 10年前發布 | 33K 次閱讀 圖片裁剪 圖形/圖像處理

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

    }  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!