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

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

第一步: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>
View Code

第二步: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;
});
View Code

第三步:后台代码

 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 }
View Code

转载于:https://www.cnblogs.com/LiuZhen/p/4206295.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git checkout 单个文件_git 如何回退单个文件

1.进入到文件所在文件目录&#xff0c;或者能找到文件的路径查看文件的修改记录git log fileName结果&#xff1a;如果文件修改记录太多&#xff0c;则使用git log -number fileName结果&#xff1a;2.回退到指定版本git reset ** fileName1.git reset -mixed&#xff1a;此为默…

未来十年最吃香专业大盘点,有你的吗?

全世界只有3.14 % 的人关注了爆炸吧知识这个世界上理工科到底有多吃香&#xff1f;如果你是理工男/女&#xff0c;先恭喜一下你&#xff0c;不知道喜从何来&#xff1f;不妨先来看这几组数据&#xff1a;高薪职业平均薪资一览表薪资最高的专业前20名这并不只是中国的情况&#…

mysql挂载到iscsi_corosync+pacemaker+iscsi磁盘实现mysql高可用

实验用主机&#xff1a;提供iscsi磁盘:172.16.103.1,提供iscsi磁盘高可用主机:172.16.103.2&#xff0c;172.16.103.3实验拓扑&#xff1a;实验步骤&#xff1a;一、配置172.16.103.1&#xff0c;输出iscsi磁盘&#xff0c;创建的磁盘分区为/dev/sda3&#xff0c;在实际的使用环…

一种在未来互联网中的面向用户的云操作系统体系

本文描述了一个欲将整个网络当做计算机使用&#xff0c;可以极大增强云计算应用能力和提高用户体验的一个类操作系统体系结构。望有识之士能做下去。 价值1&#xff09;用户的痛苦在哪里&#xff1f;对于终端用户&#xff0c;他们的痛苦在于使用Web应用不方便&#xff0c;可以使…

提高「搜商」,挣大钱

大家好&#xff0c;我是Z哥。在之前的一篇讲述数据分析的文章《这个时代最重要的技能之一》中提到了这周要和大家聊聊「搜商」的事情。搜商这个词诞生于互联网时代&#xff0c;体现的是一个人利用搜索引擎查找自己所需信息的能力。我觉得在当下这个时代&#xff0c;搜商的重要性…

idea 配置jdk版本_JDK 11 安装过程(同时已安装了JDK 8)以及Intellij IDEA 配置

电脑上已经安装过 JDK 8 版本(C:Javajdk1.8.0_111)。安装好 JDK 11 版本(C:Program FilesJavajdk-11.0.2)之后&#xff0c;目录如下&#xff0c;分别有&#xff1a;安装过程&#xff1a;1. 开始安装 JDK 11&#xff1b;2. 完成安装JDK 11&#xff1b;配置过程&#xff1a;1. 将…

老师,你和我的文具撞衫了!

全世界只有3.14 % 的人关注了爆炸吧知识来看越南学生拍摄的一组图&#xff0c;主题是老师和文具“撞衫”&#xff01;老师你和我的胶水撞了&#xff01;老师你和我的笔袋撞了&#xff01;老师你和我的手机壳撞了&#xff01;这个铅笔和老师好像啊书皮和老师很像老师今天穿得像面…

中小企业SaaS型软件BI的发展前景

2019独角兽企业重金招聘Python工程师标准>>> 传统企业在实施信息化的过程中&#xff0c;往往遵循着先用ERP把物料管起来&#xff0c;然后再CRM把客户关系管理起来&#xff0c;之后是财务系统&#xff0c;最后才会在数据的压力之下&#xff0c;实 施BI。那么&#xf…

穿透Session 0 隔离(一)

服务&#xff08;Service&#xff09;对于大家来说一定不会陌生&#xff0c;它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序&#xff0c;它随系统的“开启&#xff5e;关闭”而“开始&#xff5e;停止”其工作内容&#xff0c;在这期间无需任何用…

navicat循环执行上下两行相减sql语句_SQL语句的优化分析

一、开门见山&#xff0c;问题所在sql语句性能达不到你的要求&#xff0c;执行效率让你忍无可忍&#xff0c;一般会时下面几种情况。网速不给力&#xff0c;不稳定。服务器内存不够&#xff0c;或者SQL 被分配的内存不够。sql语句设计不合理没有相应的索引&#xff0c;索引不合…

想不到,那些让我半夜偷偷收藏的沙雕表情包,竟是出自AI之手

全世界只有3.14 % 的人关注了爆炸吧知识转自&#xff1a;机器之心参与&#xff1a;蛋酱要是收藏夹里没几个独家沙雕表情包&#xff0c;当代网民都无法在朋友圈立足。但有一些「妙不可言」的图片&#xff0c;也许是 AI 生成的结果。一般人很难读出「meme」这个词&#xff0c;它通…

JavaScript中的arguments,callee,caller

2019独角兽企业重金招聘Python工程师标准>>> arguments: arguments 该对象代表正在执行的函数和调用它的函数的参数。 [function.]arguments[n]参数 function&#xff1a;选项。当前正在执行的 Function 对象的名字。 n &#xff1a;选项。要传递给 Function 对象的…

python总结函数图像_PIL使用小结(crop和paste函数)

PIL(Python Imaging Library)是python语言中对图像处理方面的一个开源库&#xff0c;其主要功能模块为Image&#xff0c;对于Image模块&#xff0c;可以使用from PIL import Image或者import Image由于使用了试用版的chartdir库&#xff0c;在生成图片的时候下面会出现一行提示…

js中apply和join

join 分隔符分隔指定数组中的数据,不仅可以分割&#xff0c;还可以考虑用join("")合并&#xff0c;可以将一个array对象数据进行合并 1 <script>2 vark["2","3",4,5];3 alert(k.join(""));4 vars["s",":",,…

12333新农合网上查询_新农合医保查询缴费平台|新农村医疗保险网上缴费平台

这个智慧新农合新农合患者就诊从挂号到缴费&#xff0c;不用再拿着各种票据在报销处和收费处之间奔走&#xff0c;也不用担心票据不完整造成无法正常报销的情况&#xff0c;只需携带本人有效身份证和农合本&#xff0c;凭身份证号码或新农合号码即可实时报销所有费用&#xff0…

晚上我们一起去白码会所玩啊!

1 白学公主和白码王子真般配晚上一起去白码会所玩啊▼2 看完这些图我觉得要重新考虑要不要让男人陪产了▼3 乒乓球拍好难吃啊▼4 论朋友圈美食照片是怎么来的▼5 论推广普通话的重要性▼6 关键是&#xff0c;你吃完一身味忘不掉而且大多数人吃一次还想吃▼7 想知道一天1…

System.Linq捉虫记 | 论变量命名的重要性

前言下面这段代码&#xff0c;你能发现什么问题吗&#xff1f;List<int> a new List<int>{ 1, 2, 3, 4, 5 };var last2 a.TakeLast(2);foreach (var item in last2) { Console.WriteLine(item); }a.AddRange(new[] { 11, 12, 13, 14, 15 });foreach (var item in…

ASP.NET的SEO:HTTP报头状态码---内容重定向

本系列目录 我们经常说“404错误”&#xff0c;你知道他指的是什么意思么&#xff1f; 404其实是Http报头所包含的一个“状态码”&#xff0c;表明该Http请求失败。那么除此之外&#xff0c;还有哪些常用的状态码呢&#xff1f;这些状态码和SEO又有什么关系呢&#xff1f;每次当…

java 双向链表_java集合类之LinkedList

LinkedList简介LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList 实现 List 接口&#xff0c;能对它进行队列操作。LinkedList 实现 Deque 接口&#xff0c;即能将LinkedList当作双端队列使用。LinkedList 实…

疯狂福利 | 美剧《天赋异禀》1-2季免费送!播放超12亿!刷了整整一晚上,太上头!...

全世界只有3.14 % 的人关注了爆炸吧知识蹬&#xff0c;蹬&#xff0c;蹬&#xff01;爆炸吧知识的好朋友【知英语】来撒福利啦……超火美剧《天赋异禀》1-2季&#xff0c;一次性打包免费送给你喽&#xff01;注意在“知英语”公众号回复【天赋】即可获取&#xff0c;记得收好哦…