裁切图片插件jcrop的简单使用(插件化)

因为之前好几个项目和页面都要用到图片裁切功能,我就把图片裁切插件jcrop稍稍封装了一下,以达到任一个img标签,只需要非常简单的js代码即可变成可裁切的img框;

jcrop官网:http://deepliquid.com/content/Jcrop.html

简述
将页面的某个标签初始化成有裁切框样式的图片,并把裁切框信息发送给后台裁切;

使用
1、
依次引入jquery.Jcrop.min.css,jquery.js(建议不低于1.8),jquery.Jcrop.js,JcropPlugins.js(下面给出源码)

2、页面使用裁切框位置放置标签:

 <button id="jcrop39-upload" class="jcrop39-btn jcrop39-upload" type="button">上传图片</button>
    <div class="jcrop39-container">
        <img id="jcrop39-img" class="jcrop39-cutImg" src="裁剪图片的URL" />
        <button id="jcrop39-Imgcut" class="jcrop39-btn cut" type="button">裁切图片</button>
        <button id="jcrop39-ImgDelete" class="jcrop39-btn delete" type="button">删除图片</button>
    </div>

3、初始化:

 $(function () {

            var setting = {

                url: 'postData.ashx', /*必要参数 图片裁切处理后台 */ 
                imgTargat: "#jcrop39-img",/*必要参数 <img>的jquery选择器 */ 
                cutSuccessed: functionName,/*裁切成功处理函数 */ 
                deleteImg: functionName /*删除图片按钮处理事件 */ 
            } Jcrop39.init(setting);

        });

OK,第

OK,第三部完成后页面的 就可以做裁切选择,并且已经有提交按钮提交给后台进行实际的裁切了。

————————–这里是分割线,需要更多自定义设置的往下看—————————

好了,上面已经可以使用裁切控件了,如果需要更多定制化的内容呢,比如,我需要页面一加载就初始化好我设置大小的裁切框呢?

参数说明

     var setting = {
            url: 'hangdler.ashx',// 图片裁切处理后台,my的是/ashx/cutImage.ashx,mymg的是/postData.aspx?op=cutImg;(必要参数) 
            imgTargat: "#jcrop39-img",//(必要参数) 裁切<img>的jquery选择器
            aspectRatio: [3, 4],// 是否固定裁切框比例。是:[w, h] , 否:false, 默认:false(可选参数)
            staticPx: [150, 150],// 是否需要裁切成固定像素,做此设置后无论裁切框大小,最后裁切出来的实际图片固定的此填写w,h。是:[w, h], 否:false, 默认:false 
            animateTo: [0, 0, 100, 100],// 是否初始化裁切框。是:[x, y, x2, y2](x:裁切框左上角x轴坐标,y:裁切框左上角y轴坐标,x2:框宽度,y2:框高度), 否:false(不做裁剪框的初始化 ), 默认:false(可选参数) 
            maxSize: [1000, 1500],// 选框最大尺寸(px) 是[w, h] , 否:false, 默认:false(可选参数) 
            minSize: [20, 30],// 选框最小尺寸 是[w, g], 否:false, 默认:false(可选参数) 
            cutSuccessed: Successed,// 裁切【结果】返回成功(不代表裁切成功)回调函数,是:函数名 否:flase,默认:无 (可选参数) 
            deleteImg: deleteImgFun //删除图片按钮处理函数 ,是:函数名 否:flase,默认:隐藏 .jcrop39-container ,显示 .jcrop39-upload(可选参数) 
        }
        function Successed(data) {

            alert("删除图片按钮处理函数,没有此设置则使用默认处理逻辑:隐藏 .jcrop39-container ,显示 .jcrop39-upload");

        }

拓展函数

Jcrop39.setImg("imgUrl") 重新设置图片

PS: 上传图片功能需自己写,上传成功后可以调用拓展函数Jcrop39.setImg(“imgUrl”) 设置裁切图片。
后台我就不给出了,无非就是根据前台发送过来的参数,按要求裁切图片;

附件
JcropPlugins.js

(function (window, undefined) {
    var Jcrop39 = {
        jcropApi: null,
        bounds: null,
        boundx: null,
        boundy: null,
        cutInfo: null,
        imgObj: null
    },
    jcrop39;
    Jcrop39.initSetting = function () {
        Jcrop39.jcropApi.release();
        if ($.isArray(jcrop39.aspectRatio)) {
            Jcrop39.jcropApi.setOptions({ aspectRatio: jcrop39.aspectRatio[0] / jcrop39.aspectRatio[1] });
        }
        if ($.isArray(jcrop39.animateTo)) {
            Jcrop39.jcropApi.animateTo(jcrop39.animateTo);
        }
        if ($.isArray(jcrop39.maxSize)) {
            Jcrop39.jcropApi.setOptions({ maxSize: jcrop39.maxSize });
        }
        if ($.isArray(jcrop39.minSize)) {
            Jcrop39.jcropApi.setOptions({ minSize: jcrop39.minSize });
        }
    };
    Jcrop39.init = function (jc) {
        jcrop39 = jc
        Jcrop39.imgObj = $(jcrop39.imgTargat);
        if (!Jcrop39.imgObj || Jcrop39.imgObj.size() == 0 || !jcrop39 || typeof (jcrop39) != "object" || !jcrop39.url) return;

        Jcrop39.imgObj.Jcrop({
            onChange: updatePreview,
            onSelect: updatePreview
        }, function () {
            Jcrop39.jcropApi = this;
            Jcrop39.bounds = Jcrop39.jcropApi.getBounds();
            Jcrop39.boundx = Jcrop39.bounds[0];
            Jcrop39.boundy = Jcrop39.bounds[1];
            Jcrop39.initSetting();
        });
        //裁切图片
        $("#jcrop39-Imgcut").click(function () {
            var imgUrl = Jcrop39.imgObj.attr("src");
            if (!Jcrop39.imgObj || Jcrop39.imgObj.size() == 0 || !jcrop39 || typeof (jcrop39) != "object" || !jcrop39.url || !imgUrl || imgUrl == '') return;

            //正常裁切大小
            try {
                var postData = {
                    imgUrl: imgUrl,
                    rawW: parseInt(Jcrop39.boundx),
                    rawH: parseInt(Jcrop39.boundy),
                    cutW: parseInt(Jcrop39.cutInfo.w||0),
                    cutH: parseInt(Jcrop39.cutInfo.h || 0),
                    cutX: parseInt(Jcrop39.cutInfo.x || 0),
                    cutY: parseInt(Jcrop39.cutInfo.y || 0)
                };
                //固定裁切像素大小
                if ($.isArray(jcrop39.staticPx)) {
                    var zoom = (Jcrop39.cutInfo.x2 - Jcrop39.cutInfo.x) / jcrop39.staticPx[0];
                    postData.rawW = parseInt(Jcrop39.boundx / zoom);
                    postData.rawH = parseInt(Jcrop39.boundy / zoom);
                    postData.cutW = jcrop39.staticPx[0];
                    postData.cutH = jcrop39.staticPx[1];
                    postData.cutX = parseInt(Jcrop39.cutInfo.x / zoom);
                    postData.cutY = parseInt(Jcrop39.cutInfo.y / zoom);
                }
            }catch(e){
                alert("未选择裁切区域~");
                return;
            }
            //验证剪切数据 和图片地址
            if (!postData.imgUrl  //图片地址
                || isNaN(postData.rawW) || isNaN(postData.rawH) || isNaN(postData.cutW) || isNaN(postData.cutH) || isNaN(postData.cutX) || isNaN(postData.cutY) //有错误数据
                || (!postData.rawW && !postData.rawH && !postData.cutW && !postData.cutH && !postData.cutX && !postData.cutY) //全部为0 即未选择裁切区域或选了一个点
            ) {
                alert("未选择裁切区域或图片地址有误~");
                return;
            }
            $.ajax({
                url: jcrop39.url,
                type: "POST",
                data: postData,
                success: function (data) {
                    if (data && jcrop39.hasOwnProperty("cutSuccessed")) {
                        jcrop39.cutSuccessed(data);
                    }
                    else {
                        if (confirm("此操作不可撤销,确定裁切吗?")) {
                            alert("裁切成功~");
                            Jcrop39.jcropApi.disable();
                            $("#jcrop39-ImgDelete").attr("disabled", "disabled");
                        }                    
                    }
                }
            });
        });
        //删除图片
        $("#jcrop39-ImgDelete").click(function () {
            if (jcrop39.hasOwnProperty("deleteImg")) {
                jcrop39.deleteImg();
            }
            else {
                if (confirm("确定删除图片~"))
                {
                    $(".jcrop39-container").hide();
                    $("#jcrop39-upload").show();
                }
            }
        });
    };
    Jcrop39.setImg = function (imgUrl) {
        if (Jcrop39.jcropApi) {
            var preImg = new Image();
            preImg.src = imgUrl;
            Jcrop39.jcropApi.setImage(imgUrl, function () {
                Jcrop39.boundx = preImg.width;
                Jcrop39.boundy = preImg.height;
                Jcrop39.initSetting();
            });
        }
    };
    //预览图片
    function updatePreview(c) {
        Jcrop39.cutInfo = c;
    }

 window.Jcrop39 = Jcrop39;})(window);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值