本文转载自: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文件夹中。
如果上面没有文件夹请自己新建。
现在的文件结构如下
$(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";}///
}
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