码迷,mamicode.com
首页 > 编程语言 > 详细

使用cropper插件裁剪并上传图片(Spring mvc)

时间:2019-06-03 12:15:33      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:ppi   public   put   OLE   sdn   set   浏览器   save   fun   

  cropper是一款使用简单且功能强大的图片剪裁jQuery插件。该图片剪裁插件支持图片放大缩小,支持图片旋转,支持触摸屏设备,支持canvas,并且支持跨浏览器使用。 cropper有两种方式上传截取的图片数据,一种是前端把裁剪的数据传到后台进行裁剪后保存,第二种是前端拿到剪裁后的数据,转成base64后上传, 后台通过二进制流上传图片信息,这里采用的是第二种方法。

 

1、下载cropper

下载地址:https://blog.csdn.net/weixin_38023551/article/details/78792400

需要下载cropper.css 和cropper.js 两个文件

2、HTML代码

引用cropper.css 和cropper.js 两个文件,引用jquery文件

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <link  href="cropper.css" rel="stylesheet">
    <style type="text/css">
        .container {
            width: 400px;
            height:400px;
        }
    </style>
</head>
<body>
    <div class="container">
        <img id="image" src="test.png">
    </div>
    <button type="button" onclick="uploadCropImg()">生成</button>
    
    <script src="jquery.min.js"></script>
    <script src="cropper.js"></script>
    <script type="text/javascript">
        $(document).ready(function (){
            $(.container > img).cropper({
                aspectRatio: 16 / 9,//截图比例
                crop: function(data) {
                    // 出来裁切后的图片数据.
                }
            });
        });
    
        /* 上传裁剪之后的图片 **/
        function uploadCropImg(){
            var $image = $("#image");
            var src = $image.eq(0).attr("src");
            var canvasdata = $image.cropper("getCanvasData");
            var cropBoxData = $image.cropper(getCropBoxData);
            convertToData(src, canvasdata, cropBoxData, function (imgBase64Str){
                imgBase64Str = imgBase64Str.replace("data:image/jpeg;base64," , "");
                imgBase64Str = imgBase64Str.replace("data:image/png;base64," , "");
                $.ajax({
                    type: "post",
                    url: "/项目名/imgCon/uploadCropImg.do",
                    data: {
                        imgBase64Str : imgBase64Str
                    },
                    success: function(data) {
                        if(data == "success"){
                            window.opener.cropImgSuccess();
                        }else{
                            alert("上传失败");
                        }
                    },error: function(request) {
                        alert("上传失败");
                    }
                });
            })
        }
         
        /* 把裁剪完之后的图片转成base64字符串 **/
        function convertToData(url, canvasdata, cropdata, callback) {
            var cropw = cropdata.width; // 剪切的宽
            var croph = cropdata.height; // 剪切的宽
            var imgw = canvasdata.width; // 图片缩放或则放大后的高
            var imgh = canvasdata.height; // 图片缩放或则放大后的高
             
            var poleft = canvasdata.left - cropdata.left; // canvas定位图片的左边位置
            var potop = canvasdata.top - cropdata.top; // canvas定位图片的上边位置
             
            var canvas = document.createElement("canvas");
            var ctx = canvas.getContext(2d);
             
            canvas.width = cropw;
            canvas.height = croph;
             
            var img = new Image();
            img.src = url;
             
            img.onload = function() {
                this.width = imgw;
                this.height = imgh;
                    // 这里主要是懂得canvas与图片的裁剪之间的关系位置
                ctx.drawImage(this, poleft, potop, this.width, this.height);
                var base64 = canvas.toDataURL(image/jpg, 1);  // 这里的“1”是指的是处理图片的清晰度(0-1)之间,当然越小图片越模糊,处理后的图片大小也就越小
                callback && callback(base64)      // 回调base64字符串
            }
        } 
    </script>
</body>
</html>

 

技术图片

3、java代码(Controller)

package com.xwtec.controller;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import sun.misc.BASE64Decoder;

@Controller
@Scope("prototype")
@RequestMapping("/imgCon")
public class ImgController {
    
    @RequestMapping(value = "/uploadCropImg.do", method=RequestMethod.POST)
    public void uploadCropImg(HttpServletRequest request, HttpServletResponse response ,
            @RequestParam(required=true) String imgBase64Str) throws IOException{
        boolean flag = generateImage(imgBase64Str, "d://hhh.png");
        if(flag){
            response.getWriter().write("success");         
        }else{
            response.getWriter().write("default");         
        }
    }
    
    public static boolean generateImage(String imgStr, String path) {
        if (imgStr == null)
            return false;
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            byte[] b = decoder.decodeBuffer(imgStr);
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            OutputStream out = new FileOutputStream(path);
            out.write(b);
            out.flush();
            out.close();
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    
}

4、项目启动后,在html页面点击生成就可以保存图片,我这里是保存到D盘目录下。

使用cropper插件裁剪并上传图片(Spring mvc)

标签:ppi   public   put   OLE   sdn   set   浏览器   save   fun   

原文地址:https://www.cnblogs.com/kawhileonardfans/p/10966521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!