.net实现裁剪网站上传图片的方法
2023-06-13 09:15:39 时间
本文实例讲述了基于.net实现裁剪网站上传图片的方法。由于客户端Javascript不能操作文件,所以只能先上传图片再在服务器端剪切。
1、上传图片
2、Javascript剪切图片(其实只是选取要剪切的部分)
3、服务器端剪切
(1)在页面的cs文件中剪切。须放几个隐藏控件以便回传js选取的坐标。
其中剪切图片源码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Drawing; publicclassCut { ///<summary> ///裁剪图片 ///</summary> ///<paramname="sourceImg">原图片路径</param> ///<paramname="desImg">裁剪图片路径</param> ///<paramname="left">X</param> ///<paramname="top">Y</param> ///<paramname="width">宽</param> ///<paramname="height">高</param> publicstaticvoidCutImage(stringsourceImg,stringdesImg,intleft,inttop,intwidth,intheight) { System.Drawing.Imageimg=System.Drawing.Bitmap.FromFile(sourceImg); System.Drawing.ImageimgToSave=newSystem.Drawing.Bitmap(width,height); System.Drawing.Graphicsg=System.Drawing.Graphics.FromImage(imgToSave); RectangleFsourceRect=newRectangleF(left,top,width,height); RectangleFdestinationRect=newRectangleF(0,0,width,height); g.DrawImage(img, destinationRect, sourceRect, GraphicsUnit.Pixel ); g.Save(); imgToSave.Save(desImg,System.Drawing.Imaging.ImageFormat.Jpeg); g.Dispose(); imgToSave.Dispose(); img.Dispose(); } }
(2)在ashx中剪切,可回传文件流。用参数传递坐标。
usingSystem; usingSystem.Web; usingSystem.Drawing; usingSystem.IO; publicclassImgCropper_WebHandler:IHttpHandler { publicvoidProcessRequest(HttpContextcontext) { stringPic=Convert.ToString(context.Request["p"]); intPointX=Convert.ToInt32(context.Request["x"]); intPointY=Convert.ToInt32(context.Request["y"]); intCutWidth=Convert.ToInt32(context.Request["w"]); intCutHeight=Convert.ToInt32(context.Request["h"]); intPicWidth=Convert.ToInt32(context.Request["pw"]); intPicHeight=Convert.ToInt32(context.Request["ph"]); context.Response.ContentType="image/jpeg"; ResetImg(context,System.Web.HttpContext.Current.Server.MapPath(Pic),PicWidth,PicHeight,PointX,PointY,CutWidth,CutHeight).WriteTo(context.Response.OutputStream); } publicMemoryStreamResetImg(HttpContextcontext,stringImgFile,intPicWidth,intPicHeight,intPointX,intPointY,intCutWidth,intCutHeight) { ImageimgPhoto=Image.FromFile(ImgFile); BitmapbmPhoto=newBitmap(CutWidth,CutHeight,System.Drawing.Imaging.PixelFormat.Format24bppRgb); GraphicsgbmPhoto=Graphics.FromImage(bmPhoto); gbmPhoto.DrawImage(imgPhoto,newRectangle(0,0,CutWidth,CutHeight),PointX*imgPhoto.Width/PicWidth,PointY*imgPhoto.Height/PicHeight,CutWidth*imgPhoto.Width/PicWidth,CutHeight*imgPhoto.Height/PicHeight,GraphicsUnit.Pixel); //保存图片到服务器 bmPhoto.Save(context.Server.MapPath("upload/")+Guid.NewGuid()+".jpg",System.Drawing.Imaging.ImageFormat.Jpeg); //生成文件流回传 MemoryStreamms2=newMemoryStream(); bmPhoto.Save(ms2,System.Drawing.Imaging.ImageFormat.Jpeg); imgPhoto.Dispose(); gbmPhoto.Dispose(); bmPhoto.Dispose(); returnms2; } publicboolIsReusable { get { returnfalse; } } }
相关文章
- .net Parallel.Foreach的Continue和Break和Return;
- .net mvc5_mvc工作流程
- .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
- .Net 7 的 R2R,Crossgen2是什么?
- 【愚公系列】2023年02月 .NET/C#知识点-.NET Core配置文件详解
- 【愚公系列】2023年03月 .NET/C#知识点-匿名类的自动映射
- java 使用apache的net包ftp上传文件详解编程语言
- 利用Oracle.Net实现数据库互联(oracle.net)
- .net搭建ASP.NET应用程序在Linux系统上(linux搭建asp)
- Redis从入门到精通:.NET实现指南(redis.net书籍)
- Net访问Oracle数据库的简易方法(.net访问oracle)
- 数据库NET开发者操作Oracle数据库的全攻略(net操作oracle)
- 数据使用NET改变Oracle数据库的奥秘(net修改oracle)
- Net框架如何使用MySQL数据库(.net能用mysql吗)
- 使用NET来连接MySQL数据库的简单方法(.net怎么连mysql)
- 探索Oracle中NET位置的背后秘密(oracle中net位置)
- Redis无法安装NET组件(redis装不上net)
- 给.net初学者的一些建议(共勉之)
- ASP.NET中数据库操作初步
- 在ASP.NET中实现多文件上传的方法
- asp.net下实现支持文件分块多点异步上传的WebServices
- ASP.NET常用文件上传方法
- 手动把asp.net的类生成dll文件的方法
- asp.net中上传图片文件实现防伪图片水印并写入数据库
- ADO.Net类型化DataSet的简单介绍
- asp.net中js和jquery调用ashx的不同方法分享
- ADO.NET之连接池技术的使用详解
- ASP.Net获取客户端网卡MAC的小例子
- Asp.Net上传图片验证代码的小例子
- ASP.net判断上传文件类型的三种有效方法
- ASP.NET让FileUpload控件支持浏览自动上传功能的解决方法