cropper图片裁剪

 

上传时往往图片分辨率过大造成问题,在这分享给大家一个裁剪的小插件,很方便,也很实用。

HTML代码模块 

<!-- 图片裁剪需要引入的文件 -->
    <link rel="stylesheet" href="<%=basePath%>ImageResizer/css/cropper.min.css">
    <link rel="stylesheet" href="<%=basePath%>ImageResizer/css/ImgCropping.css">
    <script type="text/javascript" src="<%=basePath%>ImageResizer/js/jquery.min.js"></script>
    <script type="text/javascript" src="<%=basePath%>ImageResizer/js/cropper.min.js"></script>


<div class="larry-body-content clearfix">
    <form class="layui-form" action="" method="post">
        <div class="layui-form-item">
            <label class="layui-form-label">图片:</label>
              <div class="layui-input-block">
                  <img height="120px" width="120px" id="showImg" src="<%=basePath%>backstage/img/timg.gif">
                  <div id="jdt" class="layui-progress" lay-showpercent="true" lay-filter="demo" style="width: 120px;visibility:hidden;margin-top: 10px;" >
                  <div class="layui-progress-bar" lay-percent="0%"></div>
            </div>
            <span id="replaceImg" class="l-btn" style=" cursor: pointer;"><i class="layui-icon">&#xe67c;</i>选择图片</span>
           <!--隐藏域 用来存储上传后的图片地址-->
           <input type="hidden" name="pnaCoverPic" id="pnaCoverPic" value="">
       </div>
</div>
<!--图片裁剪器的工作页面-->
 <div style="display: none" class="tailoring-container">
     <div class="black-cloth" onClick="closeTailor(this)"></div>
         <div class="tailoring-content">
             <div class="tailoring-content-one">
                 <label title="上传图片" for="chooseImg" class="l-btn choose-btn">
                 <input type="file" accept="image/jpg,image/jpeg,image/png" name="file" id="chooseImg" class="hidden" onChange="selectImg(this)">选择图片</label>
                 <div class="close-tailoring"  onclick="closeTailor(this)">×</div>
              </div>
              <div class="tailoring-content-two">
                   <div class="tailoring-box-parcel">
                        <img id="tailoringImg"></div>
                        <div class="preview-box-parcel">
                             <p>图片预览:</p>
                             <div class="square previewImg"></div>
                             <div class="circular previewImg"></div>
                        </div>
               </div>
               <div class="tailoring-content-three">
                    <span class="l-btn cropper-reset-btn" style=" cursor: pointer;">复位</span>
                    <span class="l-btn cropper-rotate-btn" style=" cursor: pointer;">旋转</span>
                    <span class="l-btn cropper-scaleX-btn" style=" cursor: pointer;">换向</span>
                    <span class="l-btn sureCut" id="sureCut" style=" cursor: pointer;">确定</span>
                 </div>
            </div>
         </div>
         <div class="layui-form-item" style="text-align: center;">
         <button class="layui-btn" lay-submit="" lay-filter="ok">确定</button>
         <button type="layui-btn" id="cancle" class="layui-btn layui-btn-primary">取消                            </button>
  </div>
    </form>
</div>

javascript代码部分: 

<script>
 layui.use([ 'form', 'layer', 'table', 'laytpl', 'laydate' ], function() {
	var form = layui.form,
		layer = parent.layer === undefined ? layui.layer : top.layer,
		$ = layui.jquery,
		laytpl = layui.laytpl,
		table = layui.table,
		laydate = layui.laydate;
        var width = $(document).width();
        var height = $(document).height();
		<!-- 图片裁剪的js-->
        //弹出框水平垂直居中
        (window.onresize = function () {
            var win_height = $(window).height();
            var win_width = $(window).width();
            if (win_width <= 512){
                $(".tailoring-content").css({
                    "top": (win_height - $(".tailoring-content").outerHeight())/2,
                    "left": 0
                });
            }else{
                $(".tailoring-content").css({
                    "top": (win_height - $(".tailoring-content").outerHeight())/2,
                    "left": (win_width - $(".tailoring-content").outerWidth())/2
                });
            }
        })();
        //弹出图片裁剪框
        $("#replaceImg").on("click",function () {
            $(".tailoring-container").css('display','block');
        });
        //cropper图片裁剪
        $('#tailoringImg').cropper({
            aspectRatio: 300/300,//默认比例
            preview: '.previewImg',//预览视图
            guides: false,  //裁剪框的虚线(九宫格)
            autoCropArea: 1,  //0-1之间的数值,定义自动剪裁区域的大小,默认0.8
            movable: false, //是否允许移动图片
            dragCrop: true,  //是否允许移除当前的剪裁框,并通过拖动来新建一个剪裁框区域
            movable: true,  //是否允许移动剪裁框
            resizable: true,  //是否允许改变裁剪框的大小
            zoomable: false,  //是否允许缩放图片大小
            mouseWheelZoom: false,  //是否允许通过鼠标滚轮来缩放图片
            touchDragZoom: true,  //是否允许通过触摸移动来缩放图片
            rotatable: true,  //是否允许旋转图片
            crop: function(e) {
                // 输出结果数据裁剪图像。
            }
        });
        //旋转
        $(".cropper-rotate-btn").on("click",function () {
            $('#tailoringImg').cropper("rotate", 45);
        });
        //复位
        $(".cropper-reset-btn").on("click",function () {
            $('#tailoringImg').cropper("reset");
        });
        //换向
        var flagX = true;
        $(".cropper-scaleX-btn").on("click",function () {
            if(flagX){
                $('#tailoringImg').cropper("scaleX", -1);
                flagX = false;
            }else{
                $('#tailoringImg').cropper("scaleX", 1);
                flagX = true;
            }
            flagX != flagX;
        });
        //裁剪后的处理
        $("#sureCut").on("click",function () {
            if ($("#tailoringImg").attr("src") == null ){
                return false;
            }else{
                var cas = $('#tailoringImg').cropper('getCroppedCanvas');//获取被裁剪后的canvas
                var base64url = cas.toDataURL('image/png'); //转换为base64地址形式
                //console.log(base64url);
                putb64(base64url);
                //关闭裁剪框
                closeTailor();
            }
        });
    });

    //图像上传
    function selectImg(file) {
        if (!file.files || !file.files[0]){
            return;
        }
        var reader = new FileReader();
        reader.onload = function (evt) {
            var replaceSrc = evt.target.result;
            //更换cropper的图片
            $('#tailoringImg').cropper('replace', replaceSrc,false);//默认false,适应高度,不失真
        }
        reader.readAsDataURL(file.files[0]);
    }

    function putb64(picBase){
        var qitoken="";
        $.ajax({
            url: '<%=basePath%>manager/getQiNiuToken',/*base64上传获取七牛token Url*/
            type: 'post',
            async: false,
            dataType: "json",
            success: function (data) {
                console.log(data)
                if (data.state == 200) {//给七牛Token赋值
                    qitoken=data.data;
                }
            }, error: function () {
                top.layer.msg("系统异常!", {icon: 2});
            }
        });

        //七牛云官方文档方法
        /*picUrl用来存储返回来的url*/
        var picUrl;
        /*把头部的data:image/png;base64,去掉。(注意:base64后面的逗号也去掉)*/
        picBase=picBase.substring(22);
        /*通过base64编码字符流计算文件流大小函数*/
        function fileSize(str) {
            var fileSize;
            if(str.indexOf('=')>0)  {
                var indexOf=str.indexOf('=');
                str=str.substring(0,indexOf);//把末尾的’=‘号去掉
            }
            fileSize=parseInt(str.length-(str.length/8)*2);
            return fileSize;
        }
        /*把字符串转换成json*/
        function strToJson(str) {
            var json = eval('(' + str + ')');
            return json;
        }
        //http://upload-z2.qiniu.com/putb64/ 只适用于七牛云华南空间 因为我的是七牛云华南空间,如果不是华南空间需要根据七牛云文档进行更改
        var url = "https://upload-z0.qiniup.com/putb64/"+fileSize(picBase);
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange=function(){
            if (xhr.readyState==4){
                var keyText=xhr.responseText;
                /*返回的key是字符串,需要装换成json*/
                keyText=strToJson(keyText);
                /* http://image.haoqiure.com/ 是我的七牛云空间网址,keyText.key 是返回的图片文件名*/
                picUrl="http://palnam4t2.bkt.clouddn.com/"+keyText.key;
                // console.log(picUrl);
                // $("#imgShowurl").val(picUrl)   //将图片链接显示在输入框去
                $("#showImg").prop("src",picUrl);//显示为图片的形式
                $("#pnaCoverPic").val(picUrl);//给隐藏域赋值
            }
        }

        xhr.open("POST", url, true);
        xhr.setRequestHeader("Content-Type", "application/octet-stream");
        xhr.setRequestHeader("Authorization", "UpToken "+qitoken+"");
        xhr.send(picBase);
    }
    //关闭裁剪框
    function closeTailor() {
        $(".tailoring-container").toggle();
    }
</script>

下面是效果图:

所需css和js在下面 

https://www.bootcdn.cn/cropper/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值