.net实现裁剪网站上传图片的方法

作者:shichen2014 时间:2021-09-24 01:41:05 

本文实例讲述了基于.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,裁剪,图片,方法
0
投稿

猜你喜欢

  • Java8 Optional优雅空值判断的示例代码

    2021-09-20 09:16:26
  • 复杂JSON字符串转换为Java嵌套对象的实现

    2023-07-02 05:40:26
  • MyBatis执行动态SQL的方法

    2021-05-29 04:02:17
  • springmvc+shiro自定义过滤器的实现代码

    2021-08-11 21:23:11
  • Java获取接口所有实现类的方式详解

    2022-06-11 14:44:27
  • C#使用iTextSharp从PDF文档获取内容的方法

    2021-06-12 04:01:11
  • 递归出现栈溢出stackoverflow的问题及解决

    2023-01-29 16:36:10
  • android 线性布局LinearLayout实例代码

    2023-02-23 19:30:13
  • 日常收集C#接口知识(知识全面)

    2022-09-01 19:02:44
  • C#实现判断当前操作用户管理角色的方法

    2023-06-25 09:48:36
  • C#使用Chart绘制曲线

    2023-03-12 19:08:56
  • Java编程倒计时实现方法示例

    2021-05-31 06:30:11
  • C#函数式编程中的惰性求值详解

    2022-01-27 03:07:29
  • C#高性能动态获取对象属性值的步骤

    2022-08-13 13:23:12
  • vc提示unexpected end of file found的原因分析

    2022-01-19 12:58:00
  • C#异步委托调用实例分析

    2022-12-14 05:41:06
  • Android自定义View实现仿网易音乐唱片播放效果

    2022-02-27 07:18:40
  • Spring定时任务中@PostConstruct被多次执行异常的分析与解决

    2022-08-20 07:28:22
  • Android操作系统之内存回收策略

    2021-09-26 06:38:01
  • Java面向对象基础,类,变量,方法

    2023-04-08 13:21:49
  • asp之家 软件编程 m.aspxhome.com