cropper截图插件(自定义像素的图片并保存本地)

效果展示

在这里插入图片描述
公司需要截取指定大小像素的广告图,并能保存本地,由于第一次使用cropper插件,编写该文。做好笔记!!!

  • 功能:截图自定义大小的图片并保存本地,可以用来:制作头像,截取指定格式像素

  • cropper.js 通过canvas实现图片裁剪,最后在通过canvas获取裁剪区域的图片base64串。

  • cropper官方文档:cropper.js

前端页面

首先要导入对应的插件,这里我是使用的是cdn

js文件
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/cropper/3.1.3/cropper.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
css文件
<link href="https://cdn.bootcss.com/cropper/3.1.3/cropper.min.css" rel="stylesheet">
<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

标签布局

<img src="" id="fileOne">
<div id="caijianModal" class="modal fade" tabindex="-1" role="dialog"
		aria-labelledby="addModalLabel">
		<div class="modal-dialog" role="document" style="width: 1000px">
			<div class="modal-content">
				<div class="modal-header">
					<button type="button" class="close" data-dismiss="modal"
						aria-label="Close">
						<span aria-hidden="true">&times;</span>
					</button>
					<h4 class="modal-title">裁剪图片</h4>
				</div>  
				<div class="modal-body">
					    <div class="row"  >
					        <div class="col-sm-12 text-center">
					            <label for="input" class="btn btn-danger" id="">
					            <span>选择图片</span>
					            <input type="file" id="input" class="sr-only">
					            </label>
					        </div>
					        <img  src="" id="textImage">
					    </div>
					    <div class="row"  style="visibility:hidden" id="cropperBody">
					        <div class="col-sm-6 col-sm-offset-2">
					            <img src="" id="photo">
					        </div>
					        <div class="col-sm-2">
					            <div>
					                <p> 预览图 :  </p>
					                <div class="small">
					                </div>
					            </div>  
					        </div>
					    </div> 
					</div>      
				<div class="modal-footer">
					<div class="col-md-12 col-sm-12">
						<button type="button" class="btn btn-md btn-return"
							data-dismiss="modal">取消</button> 
							<button class="btn btn-default" type="button" onclick="cai()">确定裁剪</button> 
					</div>
				</div>
			</div>
		</div>
	</div>

JS方法

<script> 
        // 修改自官方demo的js
        //配置一个初始化的方法
        var initCropper = function (img, input){
            var $image = img;
            var options = { 
            		aspectRatio: wLocation / hLocation,//这里是裁剪框的长宽   可以自己定义
           	        viewMode: 1,
           	        dragMode: 'none',//图片是否可以拖动   这里我设为none
           	        preview: ".small",//这是预览图绑定,和一个div绑定就可以
           	        responsive: false, //是否在窗口尺寸改变的时候重置cropper   这里我要固定裁剪框所以设置为false
           	        autoCrop: true, //初始化自动生成裁剪框	 
            };
            $image.cropper(options); //生成
             
            var $inputImage = input;
            var uploadedImageURL;
            if (URL) { //以下这个方法是对标签以及传入的图片进行绑定和判断图片
                // 给input添加监听
                $inputImage.change(function () {
                    var files = this.files;
                    var file;
                    if (!$image.data('cropper')) {
                        return;
                    }
                    if (files && files.length) {
                        file = files[0];
                        // 判断是否是图像文件
                        if (/^image\/\w+$/.test(file.type)) {
                            // 如果URL已存在就先释放
                            if (uploadedImageURL) {
                                URL.revokeObjectURL(uploadedImageURL);
                            }
                            uploadedImageURL = URL.createObjectURL(file);
                            // 销毁cropper后更改src属性再重新创建cropper
                            $image.cropper('destroy').attr('src', uploadedImageURL).cropper(options);
                            $inputImage.val('');
                        } else {
                          window.alert('请选择一个图像文件!');
                      }
                  }
              });
            } else {
                $inputImage.prop('disabled', true).addClass('disabled');
            }
        } 
         //初始化加载生成
        $(function(){
            initCropper($('#photo'),$('#input'));
        });
//点击确认裁剪方法
function cai(){ 
	console.log("裁剪格式:"+wLocation+"HHH:"+hLocation)
   	var id = $("#imageManageId").val();
    var size={width:wLocation,height:hLocation};
    //要裁剪成的图像大小!!!这里可以通过该设置生成自己想要的指定图片大小!!!!!!!!!!!!!!!
    var cas = $('#photo').cropper('getCroppedCanvas',size);
    if(cas == null){
        alert("请选择图片");
        return false;
    }else{
        var base64url = cas.toDataURL('image/jpeg');//转换成图片格式 
          $.ajax({
            url : "${base}/advertisimagemanage/cropper.do",//上传地址
            dataType:'json',
            type: "post",
            data: {
                imgBase64 : base64url, 
            },
            success: function (data) {
            //将生成的图显示出来
            	$("#fileOne").attr("src",""); //将原裁剪的图删除
            	$("#fileOne").attr("src",'${baseImg}' +"/"+ data.message); //最新裁剪的图显示 
                alert( "图片裁剪成功!" ); 
                caijianHidden(); 
            }
        }); 
    }
} 
    </script>
    
    

按照自己想要的cropper样式,以及设置好图片生成的大小格式就可以进行转化为base64编码进行传输

后端接收文件方法

@ResponseBody
	@RequestMapping(value="cropper")
	public Map<String,Object> cropper(String imgBase64,String id,HttpServletRequest request){
		Map<String,Object> map = new HashMap<String,Object>(); 
		//定义自己想要的生成图片的路径   ---
    	StringBuffer fileDir = new StringBuffer();
	    fileDir.append(getFilePath());
		fileDir.append("advertisImageCopper/");
		fileDir.append(UUIDUtils.random());
		String imageName = UUIDUtils.random();
	    imgBase64 = imgBase64.split(",")[1]; 
	    String messageString = "";
	    try {
	    	messageString = saveImg(imgBase64,fileDir,imageName);
		} catch (Base64DecodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    map.put("message", messageString);
    	return map; 
	}
 
	/**
	 * base64转化成图片并存储
	 * @param baseImg
	 * @return
	 * @throws Base64DecodingException
	 */
	public String saveImg(String baseImg,StringBuffer pathImage,String imageName) throws Base64DecodingException   { 
		byte[] b;
		byte[] bs;
		OutputStream os = null; 
		//把图片转换成二进制
		b = Base64.decode(baseImg.replaceAll(" ", "+"));
		String path = pathImage+"";
		File file = new File(path);
		if (!file.exists() && !file.isDirectory()) {
			file.mkdirs();//创建目录
		}
		String pathCai = path + "/" +imageName+".jpg"; 
		File imageFile = new File(pathCai);
		BASE64Decoder d = new BASE64Decoder();
		// 保存图片!!
		try {
			bs = d.decodeBuffer(Base64.encode(b));
			os = new FileOutputStream(imageFile);
			os.write(bs);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace(); 
		}finally {
			if (os != null) {
				try {
					os.close();
				} catch (IOException e) {
					e.getLocalizedMessage();
				}
			}
		} 
		//返回图片的路径给 前端显示
		String fileName = "/"+pathCai.replace(SystemPropertiesUtils.getProperty("upload.path"), "");
		return fileName;
	}

个人重点

指定像素格式,并转化为base64编码获得的这个编码就可以直接进行传输了!!

var size={width:wLocation,height:hLocation};//要裁剪成的图像大小
var cas = $('#photo').cropper('getCroppedCanvas',size);
var base64url = cas.toDataURL('image/jpeg');//转换成图片格式 

base64编码格式转化为图片:转化一下图片格式即可使用Io读取图片,具体代码已经贴在上面

所有代码和方法已经贴出,需要的小伙伴可以直接复制,修改一下参数即可,有错误的大家一起探讨一下~谢谢!

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值