热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网页上传图片判断类型检测大小剪切图片ASP.NET版本

本文转载自:http:www.youarebug.comforum.php?modviewthread&tid56&extrapage%3D1我们在网页上传图片的时候

本文转载自:http://www.youarebug.com/forum.php?mod=viewthread&tid=56&extra=page%3D1

 

我们在网页上传图片的时候,特别是上传图像等操作,需要限制用户上传图片的类型、大小、有时候还需要对图片进行剪切。这样的需求在我们工作中经常遇到。今天就来说说在web开发中,如何对上传的图片判断文件的类型、检查文件的大小、对图片进行可视化裁剪等操作。很少写帖子,有不足之处,请不吝赐教。先上图看看效果:

主要采用的技术:1、jquery.uploadify 用于图片上传 检查图片大小官网:http://www.uploadify.com/     
2、imgAreaSelect 用于选择要剪切的图片区域 官网:http://odyniec.net/projects/imgareaselect/     下载上面两个文件包待用。
步骤:
1、创建ASP.net mvc3工程 工程名为ImgUpload.
2、拷贝jquery.imgareaselect-0.9.10文件夹下面的jquery.imgareaselect.min.js文件到Scripts下面的js文件夹中。
      拷贝jquery.imgareaselect-0.9.10文件夹下面的css文件夹到Content下面。
     拷贝uploadify文件夹下面的jquery.uploadify.min.js文件到Scripts下面的js文件夹中。
     拷贝uploadify文件夹下面的uploadify.swf文件到Content下面的swf文件夹中。
     如果上面没有文件夹请自己新建。
现在的文件结构如下

 

 


3、在Script/js下创建ImgUpload.js文件,内容为:

$(function () {$('#fileToUpload').uploadify({'progressData': 'speed','multi': false,'method': 'post','queueID': 'some_file_queue','fileSizeLimit': '1000k','fileTypeDesc': 'Image Files','fileTypeExts': '*.gif; *.jpg; *.png','swf': '/Content/swf/uploadify.swf','uploader': '/User/UploadImg','onUploadStart': function (file) {$('#fileToUpload').uploadify('disable', true)}, 'onUploadComplete': function (file) {$('#fileToUpload').uploadify('disable', false)}, 'onUploadSuccess': function (file, data, response) {$('#fileToUpload').uploadify('disable', false)$("#PreviewImg").attr("src", "/Content/TempImg/" + data);$("#PreviewImg").attr("data-value", data);}// Put your options here
});$('#PreviewImg').imgAreaSelect({handles: true,onSelectEnd: preview});$("#savebtn").click(function () {$.ajax({url: "/User/SaveHeaderImg?fileName=" + $("#preview_img").attr("src"),dataType: "text",success: function (json) {$("#tiebaSaveOkMsg").attr("style", "font-size: 110%; font-weight: bold; padding-left: 0.1em;display: block;");$("#savebtn_swap").attr("style", "display:none");}});});
});
function preview(img, selection) {if (!selection.width || !selection.height)return;var previewImg = $("#PreviewImg").attr("src");if ('/Content/Header/defaut.png' == previewImg) return;$.ajax({url: "/User/CutoutImg?fileName=" + previewImg + "&top=" + selection.y1 + "&left=" + selection.x1 + "&width=" + selection.width + "&height=" + selection.height,dataType: "text",success: function (json) {$("#preview_img").attr("src", "/Content/TempImg/" + json);$("#savebtn_swap").attr("style", "display:block;text-align:center; ");$("#tiebaSaveOkMsg").attr("style", "display:none");}});
}

4、创建Home控制器。添加ImgUpload方法以及视图。
ImgUpload视图的代码如下:

 

@{ViewBag.Title = "HeaderImgPage";Layout = null;
}
<link rel&#61;"stylesheet" type&#61;"text/css" href&#61;"&#64;Url.Content("~/Content/css/uploadify.css")">
<link rel&#61;"stylesheet" type&#61;"text/css" href&#61;"&#64;Url.Content("~/Content/css/imgareaselect-animated.css")">
<link rel&#61;"stylesheet" type&#61;"text/css" href&#61;"&#64;Url.Content("~/Content/css/imgareaselect-default.css")">
<link rel&#61;"stylesheet" type&#61;"text/css" href&#61;"&#64;Url.Content("~/Content/css/imgareaselect-deprecated.css")">
<script src&#61;"&#64;Url.Content("~/Scripts/jquery-1.5.1.js ")" type&#61;"text/Javascript">script>
<script src&#61;"&#64;Url.Content("~/Scripts/js/ImgUpload.js")" type&#61;"text/Javascript">script>
<script src&#61;"&#64;Url.Content("~/Scripts/js/jquery.uploadify.min.js")" type&#61;"text/Javascript">script>
<script src&#61;"&#64;Url.Content("~/Scripts/js/jquery.imgareaselect.min.js")" type&#61;"text/Javascript">script>
<style type&#61;"text/css">body {background:#fff;}
style>
<div class&#61;"container-box"><p style&#61;"font-size: 110%; font-weight: bold; padding-left: 0.1em;">1、择一张图片p><div ><div style&#61;" float:left; height:50px"><input type&#61;"file" id&#61;"fileToUpload" name&#61;"fileToUpload" />div><div id&#61;"some_file_queue" style&#61;" float:left;height:50px; width:300px; margin-left:30px; ">div> div><div style&#61;"float: left; clear:both;"><p style&#61;"font-size: 110%; font-weight: bold; padding-left: 0.1em;">2、点击鼠标拖动相框截取图像p><div class&#61;"frame" style&#61;"margin: 0 0.3em; width: 300px; height: 300px;"><img id&#61;"PreviewImg" src&#61;"/Content/defaut.png" style&#61;"width: 300px; height: 300px;">div>div><div style&#61;"float: left;"><p style&#61;"font-size: 110%; font-weight: bold; padding-left: 0.1em;">3、预览截取的图像&#xff0c;点击保存。p><div style&#61;"text-align:center"><div class&#61;"frame" style&#61;"margin: 0 auto; width: 100px; height: 100px;"><img id&#61;"preview_img" src&#61;"/Content/defaut.png" style&#61;"width: 100px; height: 100px;">div>div><div id&#61;"savebtn_swap" style&#61;"text-align:center; display:none"><div style&#61;"margin: 20 auto 0 auto; width:70px;"><input type&#61;"submit" id&#61;"savebtn" class&#61;"setting-submit-btn setting-submit-ml100" value&#61;"保存">div>div><div class&#61;"save-ok" style&#61;"font-size: 110%;text-align:center; font-weight: bold; padding-left: 0.1em;display: none;" id&#61;"tiebaSaveOkMsg" ><div style&#61;"margin: 20 auto 0 auto; width:90px;"><p>保存成功p>div>div>div>
div>

5、在Home控制器中添加UploadImg&#xff0c;CutoutImg&#xff0c;SaveHeaderImg方法&#xff0c;添加后代码如下&#xff1a;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.IO;
using System.Drawing;namespace ImgUpload.Controllers
{
public class HomeController : Controller{//// GET: /Home/public ActionResult Index(){return View();}public ActionResult ImgUpload(){return View();}///

/// 上传图片接口 上传头像使用/// ///
[HttpPost]public String UploadImg(){HttpPostedFileBase postedFile_pic &#61; Request.Files["Filedata"];//获取上传信息对象 if (postedFile_pic !&#61; null && postedFile_pic.ContentLength !&#61; 0){String PicFilePath &#61; postedFile_pic.FileName;//获取上传的文件路径 String PicName &#61; Path.GetFileNameWithoutExtension(postedFile_pic.FileName);//获取文件名String SavePath &#61; Server.MapPath("/Content/TempImg/");String PicExtension &#61; PicFilePath.Substring(PicFilePath.LastIndexOf(&#39;.&#39;));//获取拓展名//构造随机名称String Photo &#61; PicName &#43; "_" &#43; DateTime.Now.Ticks &#43; PicExtension;postedFile_pic.SaveAs(SavePath &#43; Photo);//规格化System.Drawing.Image image &#61; System.Drawing.Image.FromFile(SavePath &#43; Photo);//接着创建一个System.Drawing.Bitmap对象&#xff0c;并设置你希望的缩略图的宽度和高度。int srcWidth &#61; image.Width;int srcHeight &#61; image.Height;Bitmap bmp &#61; new Bitmap(300, 300);//从Bitmap创建一个System.Drawing.Graphics对象&#xff0c;用来绘制高质量的缩小图。System.Drawing.Graphics gr &#61; System.Drawing.Graphics.FromImage(bmp);//设置 System.Drawing.Graphics对象的SmoothingMode属性为HighQualitygr.SmoothingMode &#61; System.Drawing.Drawing2D.SmoothingMode.HighQuality;//下面这个也设成高质量gr.CompositingQuality &#61; System.Drawing.Drawing2D.CompositingQuality.HighQuality;//下面这个设成Highgr.InterpolationMode &#61; System.Drawing.Drawing2D.InterpolationMode.High;//把原始图像绘制成上面所设置宽高的缩小图System.Drawing.Rectangle rectDestination &#61; new System.Drawing.Rectangle(0, 0, 300, 300);gr.DrawImage(image, rectDestination, 0, 0, srcWidth, srcHeight, GraphicsUnit.Pixel);String NewPhoto &#61; "__" &#43; PicName &#43; "_" &#43; DateTime.Now.Ticks &#43; PicExtension;bmp.Save(SavePath &#43; NewPhoto);bmp.Dispose();image.Dispose();FileInfo fi &#61; new FileInfo(SavePath &#43; Photo);fi.Delete();return NewPhoto;}return "Invalid file type";}/// /// 裁剪图片/// /// /// /// /// /// /// public String CutoutImg(String fileName, int top, int left, int width, int height){String PicExtension &#61; fileName.Substring(fileName.LastIndexOf(&#39;.&#39;));//获取拓展名String Photo &#61; "__" &#43; DateTime.Now.Ticks &#43; PicExtension;String RootPath &#61; Server.MapPath("/");String HeaderImgPath &#61; Server.MapPath("/Content/TempImg/");Bitmap bmp &#61; new Bitmap(RootPath &#43; fileName);Rectangle rect &#61; new Rectangle(left, top, width, height);Bitmap tempBitmap &#61; bmp.Clone(rect, bmp.PixelFormat);tempBitmap.Save(HeaderImgPath &#43; Photo);bmp.Dispose();tempBitmap.Dispose();return Photo;}public String SaveHeaderImg(String fileName){String RootPath &#61; Server.MapPath("/");String PicExtension &#61; fileName.Substring(fileName.LastIndexOf(&#39;.&#39;));String NewName &#61; "__" &#43; DateTime.Now.Ticks &#43; PicExtension;String HeaderImgPath &#61; Server.MapPath("/Content/Header/");FileInfo fi &#61; new FileInfo(RootPath &#43; fileName);fi.MoveTo(HeaderImgPath &#43; NewName);return "";}}
}

6、运行&#xff0c;在浏览器中输入http://localhost:6133/Home/ImgUpload即可。
保存后的截图保存在Content/Header文件夹下面。


7、完整源码下载

http://www.youarebug.com/forum.php?mod&#61;viewthread&tid&#61;56&extra&#61;page%3D1

 

 


转:https://www.cnblogs.com/whh306318848/p/3583724.html



推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文总结了在开发中使用gulp时的一些技巧,包括如何使用gulp.dest自动创建目录、如何使用gulp.src复制具名路径的文件以及保留文件夹路径的方法等。同时介绍了使用base选项和通配符来保留文件夹路径的技巧,并提到了解决带文件夹的复制问题的方法,即使用gulp-flatten插件。 ... [详细]
author-avatar
江雅君7299
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有