ASP.NET图片上传和截取
一、介绍:图片的上传直接使用ajax就可以了,截取图片的话使用到Jcrop插件。
图片上传资料:https://www.jb51.net/article/87654.htm
截取图片插件:http://code.ciaoca.com/jquery/jcrop/
前端
添加引用
1 <script src="../js/jquery.min.js"></script> 2 <link href="../Css/jquery.Jcrop.min.css" rel="stylesheet" /> 3 <script src="../js/jquery.Jcrop.min.js"></script>
HTML代码
1 <input type="file" name="photo" id="photo" value="" placeholder="免冠照片"> 2 <input type="button" onclick="postData();" value="下一步" name="" style="width: 100px; height: 30px;"> 3 <img id="showPhoto" />
JavaScript代码
1 <script type="text/javascript"> 2 //文件上传方法 3 function postData() { 4 var formData = new FormData(); 5 //上传文件的变量名 6 formData.append("Filedata", $("#photo")[0].files[0]); 7 $.ajax({ 8 url: "/ashx/upload.ashx?action=upload", /*接口域名地址*/ 9 type: 'post', 10 data: formData, 11 contentType: false, 12 processData: false, 13 success: function (res) { 14 $("#showPhoto").attr("src", res); 15 CutPhoto(); 16 } 17 }) 18 } 19 //截图 20 function CutPhoto() { 21 var jcropApi; 22 $('#showPhoto').Jcrop({ 23 //选框选定时的事件 24 onSelect: function (c) { 25 $.ajax({ 26 url: "/ashx/upload.ashx?action=cut", 27 type: "post", 28 data: { 29 "x": c.x, 30 "y": c.y, 31 "width": c.w, 32 "height": c.h, 33 "imgSrc": $("#showPhoto").attr("src") 34 }, 35 success: function () { 36 37 } 38 }); 39 }, 40 allowSelect: true,//允许新选框 41 baseClass: 'jcrop' 42 }, function () { 43 jcropApi = this; 44 }); 45 } 46 </script>
后台
添加一个一般处理程序upload.ashx
代码
1 public class upload : IHttpHandler 2 { 3 4 public void ProcessRequest(HttpContext context) 5 { 6 context.Response.ContentType = "text/plain"; 7 //判断action 8 string action = context.Request["action"]; 9 if (action == "upload") 10 { 11 Upload(context); 12 } 13 else if (action == "cut") 14 { 15 CutPhoto(context); 16 } 17 } 18 19 public bool IsReusable 20 { 21 get 22 { 23 return false; 24 } 25 } 26 /// <summary> 27 /// 文件上传 28 /// </summary> 29 private void Upload(HttpContext context) 30 { 31 //获取文件 32 HttpPostedFile file = context.Request.Files["Filedata"]; 33 //判断文件是否为空 34 if (file != null) 35 { 36 //获取文件名 37 string fileName = Path.GetFileName(file.FileName); 38 //获取文件扩展名 39 string fileExt = Path.GetExtension(fileName); 40 //判断文件扩展名是否正确 41 if (fileExt == ".jpg") 42 { 43 //获得文件路径 44 string filePath = "/UploadFile/" + DateTime.Now.Year + DateTime.Now.Month + DateTime.Now.Day; 45 //判断文件是否存在 46 if (!System.IO.Directory.Exists(context.Request.MapPath(filePath))) 47 { 48 //不存在则创建 49 Directory.CreateDirectory(context.Request.MapPath(filePath)); 50 } 51 //生成新的文件名 52 string newFileName = filePath + "/" + Guid.NewGuid() + fileExt; 53 //保存文件 54 file.SaveAs(context.Request.MapPath(newFileName)); 55 //返回文件路径 56 context.Response.Write(newFileName); 57 } 58 } 59 } 60 /// <summary> 61 /// 截取图片 62 /// </summary> 63 /// <param name="context"></param> 64 private void CutPhoto(HttpContext context) 65 { 66 int x = Convert.ToInt32(context.Request["x"]); 67 int y = Convert.ToInt32(context.Request["x"]); 68 int width = Convert.ToInt32(context.Request["width"]); 69 int height = Convert.ToInt32(context.Request["height"]); 70 string imgSrc = context.Request["imgSrc"]; 71 //创建画布 72 using (Bitmap bitmap = new Bitmap(width, height)) 73 { 74 //创建画笔 75 using (Graphics g = Graphics.FromImage(bitmap)) 76 { 77 //创建图片 78 using (Image img = Image.FromFile(context.Request.MapPath(imgSrc))) 79 { 80 //截取图片 81 //第一个参数:要画的图片 82 //第二个参数:画多大 83 //第三个参数:画图片的哪个部分 84 g.DrawImage(img, new Rectangle(0, 0, width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel); 85 string newImgName = Guid.NewGuid().ToString()+".jpg"; 86 string dir = "/UploadFile/" + newImgName; 87 bitmap.Save(context.Request.MapPath(dir),System.Drawing.Imaging.ImageFormat.Jpeg); 88 } 89 } 90 } 91 } 92 }