图片上传和裁剪,bitmapcutter组件的使用

Posted tooy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片上传和裁剪,bitmapcutter组件的使用相关的知识,希望对你有一定的参考价值。

图片上传在上篇博文中讲过。

这里主要是裁剪的实现,需要用到bitmapcutter组件。

jquery.bitmapcutter该插件由Jericho开发,它的主要作用是客户端裁图。

引入jquery库

<script language="javascript" type="text/javascript" src="/js/jquery1.4.2.min.js"></script>

引入jquery.bitmapcutter库及其相关样式

<script type="text/javascript" src="/javascript/jquery.bitmapcutter.js"></script>
<link rel="Stylesheet" type="text/css" href="/css/jquery.bitmapcutter.css" /> 

直接上代码:

js

    uploadOkHeadPhoto: function (file, response) {
        response = $.parseJSON(response);
        if (!response.IsSuccess) return;

        if (typeof (response.Data) == "string") {
            $("#target").attr("src", response.Data + "?_t=" + Math.random());
        }
        else if (response.Data.length == 1) {
            $("#target").attr("src", response.Data[0] + "?_t=" + Math.random());
        } else {
            var urlimg;
            var filename;
            if (response.Data.length > 1) {
                urlimg = response.Data[0].replace("\\"", "").replace("\\"", "");
                filename = urlimg.substring(urlimg.lastIndexOf("/") + 1);
                jcropimg.open(urlimg + "?_t=" + Math.random(), urlimg, response.Data[1]);
            }
        }
    },

上传完成后的回调用函数,open裁剪功能:

//剪裁图片
var jcropimg = {
    fileurl: "",
    fileposition: "",
    isCut: false,
    open: function (imgurl, fileurl, fileposition) {
        jcropimg.fileurl = fileurl;
        jcropimg.fileposition = fileposition;
        jcropimg.isCut = false;


        var dialog; dialogid = \'dlgw_dialog_jcropimg\';
        var buttons = beehunt.getDefaultButtons();
        buttons[0].text = \'确定\';
        buttons[0].handler = function () {
            $("#uploadPicture").attr("src", fileurl + "?t=" + Math.random());
            $("#hidPicturePath").val(jcropimg.fileposition);
            $("#hidPictureUrl").val(jcropimg.fileurl);
            this.close();
        };
        dialog = beehunt.dialog({ id: dialogid, url: \'/dialog/jcropimg?islogo=1&dialogid=\' + dialogid + \'&imgurl=\' + imgurl + \'&fileurl=\' + fileurl, title: \'裁剪\', width: \'600\', height: \'600\', buttons: buttons, grid: \'\' });
    }
};

弹出裁剪dialog,如下图:

html代码:

 <!---裁剪图片 弹框-->
<form id="FrmJcropimg_Dialog" method="post">
    <table style="width:100%;">
        <tr>
            <td>
                <div class="img-container" style="text-align:center;min-width:300px;">
                    <img id="jcropimg" style="display:none;" />
                </div>
                <div id="container"></div>

                <div id="div_preview" style="display:none;text-align:center;vertical-align:middle;">
                    <br />
                    <p style="margin:0px;">裁剪后效果图如下</p>
                    <br />
                    <img id="preview" />
                    <br /><br />
                </div>
            </td>
        </tr>
    </table>
</form>

确保你的网页中有一个装下该插件的容器

<div id="container"></div>

html加载完成的js代码:

@*定义选中按钮OnPageLoad执行脚本*@
//照片裁剪代码
//src:原始大图的路径
//width:目标宽
//height:目标高
//newSrc:裁完以后,用于显示小图片的元素ID 

@section OnPageLoad{
    <script type="text/javascript">
    $(function () {
        $("#jcropimg").attr("src", \'@req_imgUrl\');

        $("#container").html(\'\');
        $("#jcropimg").attr("src", "").hide();

        var w = 150, h = 150;//  剪切
        var pw = \'200px\', ph = \'270px\', phh = \'235px\';//窗口

        $.fn.bitmapCutter({
            src: \'@req_fileUrl\',
            requesturl: \'/api/scissors.axd\',

            renderTo: $("#container"),
            cutterSize: { width: w, height: h },
            onGenerated: function (newSrc) { //裁完并保存后返回保存后图片地址
                $("#preview").attr("src", newSrc + "?t=" + Math.random()).show();
                $("#div_preview").show();
                $("#container").hide();
                $(".jquery-bitmapcutter-newimg").hide();

                var dialog = $(top.window.document).find("#@req_dialogId").eq(0);
                dialog.css({ "width": "", "height": ph });
                dialog.find(".dialog-content").css({ "width": "", "height": phh });
                dialog.parent().next().css({ "width": pw, "height": ph });

                //dialog.parent().next().next().remove();
                //dialog.parent().next().remove();
                //dialog.parent().remove();
            },
            rotateAngle: 90
        });
    });
    </script>
}

 注意,在这个插件中点击"开始裁切"后,它会裁切前上传,再返回小图的SRC,这里就涉及了上传插件的对接,这个插件名叫 BitmapCutter.Core,这是由国内一位工程师写的,当然如果你觉得不爽,你也可以定义自己的上传插件,不过我要提醒大家的是重写这些代码的代价是否划算。

请注意在jquery.bitmapcutter.js第423行

$.get(\'scissors.axd\',{.....

 这里给出了上传的路径,需要到web.config中做映射处理:

映射处理在Web.config中System.Web节:

<system.web>
   <httpHandlers>
   <add path="scissors.axd" verb="*" type="BitmapCutter.Core.HttpHandler.BitmapScissors,BitmapCutter.Core" validate="false"/>
  </httpHandlers> 

httpHandlers元素说明

要做到这些,我们需要做以下工作:

1.在你的项目中引用BitmapCutter.Core.dll

2.修改Web.config中的System.Web节

好了,所有的工作差不多完成。

 

参考博文:

很棒的在线裁图工具jQuery1.4.2 + jquery.bitmapcutter.js + BitmapCutter.Core+的完美配合

jquery.bitmapcutter(图片裁剪插件) 与 jquery1.4.2 配合

 

以上是关于图片上传和裁剪,bitmapcutter组件的使用的主要内容,如果未能解决你的问题,请参考以下文章

图片上传器+裁剪

React 实现图片裁剪/上传/预览/下载/删除(主要是图片裁剪)

Vue实现前端裁剪(elementUI上传+vueCropper实现)

el-upload配合vue-cropper实现上传图片前裁剪

el-upload配合vue-cropper实现上传图片前裁剪

web技术分享| 图片上传与图片裁剪结合 vue3