.net实现裁剪网站上传图片的方法
2018-10-12 14:06
676 查看
本文实例讲述了基于.net实现裁剪网站上传图片的方法。由于客户端Javascript不能操作文件,所以只能先上传图片再在服务器端剪切。
1、上传图片
2、Javascript剪切图片(其实只是选取要剪切的部分)
3、服务器端剪切
(1)在页面的cs文件中剪切。须放几个隐藏控件以便回传js选取的坐标。
其中剪切图片源码如下:
using System; using System.Collections.Generic; using System.Text; using System.Drawing; public class Cut { /// <summary> /// 裁剪图片 /// </summary> /// <param name="sourceImg">原图片路径</param> /// <param name="desImg">裁剪图片路径</param> /// <param name="left">X</param> /// <param name="top">Y</param> /// <param name="width">宽</param> /// <param name="height">高</param> public static void CutImage(string sourceImg, string desImg, int left, int top, int width, int height) { System.Drawing.Image img = System.Drawing.Bitmap.FromFile(sourceImg); System.Drawing.Image imgToSave = new System.Drawing.Bitmap(width, height); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(imgToSave); RectangleF sourceRect = new RectangleF(left, top, width, height); RectangleF destinationRect = new RectangleF(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中剪切,可回传文件流。用参数传递坐标。
using System; using System.Web; using System.Drawing; using System.IO; public class ImgCropper_WebHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { string Pic = Convert.ToString(context.Request["p"]); int PointX = Convert.ToInt32(context.Request["x"]); int PointY = Convert.ToInt32(context.Request["y"]); int CutWidth = Convert.ToInt32(context.Request["w"]); int CutHeight = Convert.ToInt32(context.Request["h"]); int PicWidth = Convert.ToInt32(context.Request["pw"]); int PicHeight = 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); } public MemoryStream ResetImg(HttpContext context, string ImgFile, int PicWidth, int PicHeight, int PointX, int PointY, int CutWidth, int CutHeight) { Image imgPhoto = Image.FromFile(ImgFile); Bitmap bmPhoto = new Bitmap(CutWidth, CutHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb); Graphics gbmPhoto = Graphics.FromImage(bmPhoto); gbmPhoto.DrawImage(imgPhoto, new Rectangle(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); //生成文件流回传 MemoryStream ms2 = new MemoryStream(); bmPhoto.Save(ms2, System.Drawing.Imaging.ImageFormat.Jpeg); imgPhoto.Dispose(); gbmPhoto.Dispose(); bmPhoto.Dispose(); return ms2; } public bool IsReusable { get { return false; } } }
您可能感兴趣的文章:
相关文章推荐
- .net实现裁剪网站上传图片的方法
- Java实现给网站上传图片盖章的方法
- .Net 实现图片缩略图上传通用方法
- .Net实现上传图片按比例自动缩小或放大的方法
- .Net实现上传图片按比例自动缩小或放大的方法
- 基于mars老师视频,android 腾讯微博微博 HttpClient 方法实现上传图片
- SilvetLight 实现的一个上传图片时功能动态裁剪部分区域和缩放图片的功能
- Flex与.NET互操作(十五):使用FluorineFx中的字节数组(ByteArray)实现图片上传
- Flex与.NET互操作(十五):使用FluorineFx中的字节数组(ByteArray)实现图片上传
- iPhone开发笔记(12)利用.net实现服务端接收上传的图片并保存
- 关于百度富文本编辑器ueditor的.NET版本地图片上传提示uploader类同时存在于两个dll中的解决方法
- .NET使用swfupload实现图片批量上传
- 关于百度富文本编辑器ueditor的.NET版本地图片上传提示uploader类同时存在于两个dll中的解决方法
- .net网站与Winform窗体的数据交互(JS调用Winform后台方法实现)
- .NET使用swfupload实现图片批量上传
- .net 实现批量上传图片,图片还要显示出来
- 网站中图片滚动效果的实现方法集锦
- FF3(FireFox3),IE8上传图片实现图片预览的方法
- 彻底解决ewebeditor网站后台不能上传图片的方法
- [转]FF3(FireFox3),IE8上传图片实现图片预览的方法