图片裁剪和异步上传插件--一步到位(记录)

图片上传裁剪这功能随处可见,有的自己写,不过太耗费时间了,插件的话感觉好多,前段时间就想挑一款好的插件,以后就用那款,可是挑了几款插件用上去,效果很好,问题就出在合并了,单一的插件效果是很好的,没问题,不然人家也不用吃饭了,可是当我把这几款插件合并一起用的时候就各种奇怪的问题出来了,决解了一个又跑出一个来了,最后挑了好半天发现了一款还好用的,就赶紧的记录下来了,不然以后要用又要找,麻烦死了,浪费时间啊,所以记录一下心得,一步到位,这也算是栽了颗树吧,供小白乘凉。

第一步:html代码

<script src="~/Scripts/jquery-1.10.2.min.js"></script><!--要9.0以上的版本-->
<script src="~/js/jquery.form.js"></script><!--一步上传提交(上传)此插件不是裁剪,属于另外

下载的,为了方便异步上传提交-->
<link href="~/css/bootstrap.min.css" rel="stylesheet" />
<link href="~/css/cropper.css" rel="stylesheet" />
<link href="~/css/docs.css" rel="stylesheet" />
<script src="~/js/bootstrap.min.js"></script>
<script src="~/js/cropper.js"></script><!--裁剪上传 http://fengyuanchen.github.io/cropper/ 

-->

<form action="#" id="form_upload" method="post">
    <label style="width:60px;height:30px;" for="inputImage" title="打开图片">
        <input class="hide" id="inputImage" name="file" type="file" 

accept="image/*">
                                                浏览...
    </label>
    <!--上传提示-->
    <div class="upload_tag"></div>
    <div style="margin-top:10px;">
        <div style="width:100px;height:100px;">
                    <img alt="Picture" class="cropper" src="/images/background1.jpg" />
                </div><br /><br />
            <div class="preview preview-lg"></div>
        </div><br /><br />
    <div>
            <input type="submit" value="上传" class="btn upload_point btn-primary" 

style="width:60px;height:30px;" />
        </div>
</form>

第二步:docs.js代码

$(function () {
    var $image = $(".cropper"),
        $dataX = $("#dataX"),
        $dataY = $("#dataY"),
        $dataHeight = $("#dataHeight"),
        $dataWidth = $("#dataWidth"),
        //console = window.console || { log: $.noop },
        cropper;

    $image.cropper({
        aspectRatio: 1,//纵横比例string/number,默认auto,1表示正方形,16/4表示长方形
        autoCropArea: 0.3,//0和1之间的数。定义自动裁剪区域的大小(百分比)
        zoomLevel: 1,//缩放级别
        //data: {//只支持四个属性:“x”,“y”,“width”和“height”,默认情况下裁剪区将出

现在图像的中心。
        //  x: 420,
        //  y: 50,
        //  width: 100,
        //  height: 100
        //},
        preview: ".preview",//jQuery选择器预览,添加额外的元素,预览区域
        modal: true,//区分裁剪区和背景
        dashed: true,//设置裁剪区的方格虚线
        autoCrop: true,//是否自动显示裁剪区
        dragCrop: true,//使删除当前裁剪区,通过拖动在图像上创建一个新的
        dashed: true,
        modal: true,
        movable: true,//移动裁剪区
        resizable: true,//调整裁剪区
        zoomable: true,//放大图片
        rotatable: true,//旋转图片
        checkImageOrigin: true,//检查图像的来源,如果它是一个跨原产地形象,crossorigin属性将

被添加到图像元素使“旋转”和“getdataurl”

        //maxWidth: 100,//裁剪区
        //maxHeight: 100,
        //minWidth: 100,
        //minHeight: 100,

        done: function (data) {//区域变化时触发
            $dataX.val(data.x);
            $dataY.val(data.y);
            $dataHeight.val(data.height);
            $dataWidth.val(data.width);
        },

        build: function (e) {//创建裁剪区之前触发

        },

        built: function (e) {//创建裁剪区之后触发

            $image.cropper("zoom", -1);
        },

        dragstart: function (e) {//裁剪区移动之前触发

        },

        dragmove: function (e) {//裁剪区移动之时触发

        },

        dragend: function (e) {//裁剪区移动之后触发

        }
    });
    $("#zoomOut").click(function () {
        $image.cropper("zoom", -1);
    });
    var $inputImage = $("#inputImage");

    if (window.FileReader) {//选择图片
        $inputImage.change(function () {
            var fileReader = new FileReader(),
                files = this.files,
                file;

            if (!files.length) {
                return;
            }

            file = files[0];

            if (/^image\/\w+$/.test(file.type)) {
                fileReader.readAsDataURL(file);
                fileReader.onload = function () {
                    $image.cropper("reset", true).cropper("replace", this.result).css

("width","100px");
                    $inputImage.val("");

                };
            } else {
                showMessage("请选择图片.");
            }
        });
    } else {
        $inputImage.addClass("hide");
    }

});

//上传代码
$(".upload_point").click(function () {
    //alert($(".cropper").cropper("getDataURL"), type); return false;
        $("#form_upload").ajaxSubmit({
            url: "/Home/ProcessRequest",
            type: "post",
                dataType: "text",
                data: { "getDataURL": $(".cropper").cropper("getDataURL",{width: 50,height: 

50}) },//表示把base64的图片字符格式提交到后台
                success: function (data) {
                    $(".upload_tag").text(data).css

({"color":"green","display":"block"});
                }, error: function () {
                        $(".upload_tag").text("上传异常,请刷新或重新登录").css({ "color": 

"red", "display": "block" });
                    }
        });
        return false;
});

第三步:后台代码

 1 [HttpPost]
 2 public string ProcessRequest(FormCollection f)
 3 {
 4     try
 5     {
 6             string byteStr = f["getDataURL"].ToString();//data:image/png;base64,
 7                 int delLength = byteStr.IndexOf(‘,‘) + 1;
 8                 string str = byteStr.Substring(delLength, byteStr.Length - delLength);
 9                 Image returnImage = Base64StringToImage(str);
10
11                 returnImage.Save(Server.MapPath("/images/head/") + Guid.NewGuid() + ".jpg",
12
13 System.Drawing.Imaging.ImageFormat.Jpeg);
14     }
15     catch (Exception)
16     {
17             return "上传失败";
18     }
19         return "上传成功";
20 }
21 //base64编码的文本 转为    图片
22 private Image Base64StringToImage(string txt)
23 {
24     byte[] arr = Convert.FromBase64String(txt);
25     MemoryStream ms = new MemoryStream(arr);
26     Bitmap bmp = new Bitmap(ms);
27     return bmp;
28 }

时间: 2024-07-29 18:42:23

图片裁剪和异步上传插件--一步到位(记录)的相关文章

jquery之ajaxfileupload异步上传插件

来自:http://www.blogjava.net/sxyx2008/archive/2010/11/02/336826.html 由于项目需求,在处理文件上传时需要使用到文件的异步上传.这里使用Jquery Ajax File Uploader这个组件下载地址:http://www.phpletter.com/download_project_version.php?version_id=6服务器端采用struts2来处理文件上传.所需环境:jquery.jsajaxfileupload.j

基于struts2的ajaxfileupload异步上传插件的使用

实例: jsp页面 <%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//E

适应各浏览器图片裁剪无刷新上传js插件(转)

看到一篇兼容性很强的图片无刷新裁剪上传的帖子,感觉很棒.分享下!~ 废话不多说,上效果图. 一.首先建立如下的一个page <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <

plupload 异步上传插件使用心得

plupload 可以不依赖jquery,并且提供了 html5,flash,silverlight,html4 多种上传模式,使用起来比较简单,上一篇博客中介绍了其主要参数哈函数 一.简化用法 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr"> <head> <meta http-equiv="content-type&quo

微信开发--图片异步上传。

一.需求 微信网页中实现上传头像,用户信息,用户宣传照的功能. 二.问题 微信网页上传普通浏览器的上传不一样,微信内置浏览器禁止了普通的input上传功能,并且此标签在有些移动终端显示不佳. 三.解决 使用微信官方文档提供的jssdk的上传图片接口.微信自己的jssdk里面的图片上传不用考虑兼容性. 具体实现逻辑是: 配置好jssdk后,可以使用jssdk上传接口上传图片到微信服务器,微信服务器会返回给你一个资源id,我们在使用js异步或者表单同步把资源id传输到php服务器端,php服务器端就

jQuery插件之ajaxFileUpload异步上传

介绍 AjaxFileUpload.js 是一个异步上传文件的jQuery插件,原理是创建隐藏的表单和iframe然后用JS去提交,获得返回值. 下载地址: http://files.cnblogs.com/files/kissdodog/ajaxfileupload_JS_File.rar http://zhangzhaoaaa.iteye.com/blog/2123021 属性 语法:$.ajaxFileUpload([options]) url 上传处理程序地址. fileElementI

JSP+SpringMVC框架使用WebUploader插件实现注册时候头像图片的异步上传功能

一.去官网下载webuploader文件上传插件 https://fex.baidu.com/webuploader/ 下载好后把它放到Javaweb项目的文件夹中(我放到了webcontent下面的static里面) 二.复制前端的样式 把这段代码放到你想要放到的位置(刷新页面和示例中不一样?不用担心因为你还没有初始化{就是还没有导入swf文件},指定路径后刷新应该就好了) 三.复制实现文件异步上传的js代码(这里我们只复制图片上传的部分) js源码的中文是乱码,应该是缺少谷歌改编码格式的插件

文件上传之——用SWF插件实现文件异步上传

之前提高过几篇文件上传,那些都不错.今天小编带领大家体会一种新的上传方法,及使用Flash插件实现文件上传. 使用Flash的好处就是可以解决浏览器兼容性问题.之前我写的一个快捷复制功能也是利用的Flash. 最近一直在用MVC,所以还是以MVC举例:先来张效果图: UploadIndex2.cshtml代码: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&q

jQuery插件-ajaxFileUpload异步上传文件

ajaxFileUpload是前两天学习过程中接触到的一个JQ插件,功能很简单,就是实现异步上传文件的功能. 1.语法介绍 $.ajaxFileUpload([setting]); 参数说明: (1)url——执行上传处理的地址: (2)secureuri——是否启用安全提交,默认为false: (3)fileElementId——需要上传<input type=”file”>控件id属性值: (4)data——自定义参数,即需要额外传递的JSON格式数据: (5)type——请求方式,提交自