VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > c#编程 >
  • C#教程之.net实现裁剪网站上传图片的方法

本文实例讲述了基于.net实现裁剪网站上传图片的方法。由于客户端Javascript不能操作文件,所以只能先上传图片再在服务器端剪切。
1、上传图片
2、Javascript剪切图片(其实只是选取要剪切的部分)
3、服务器端剪切
 
(1)在页面的cs文件中剪切。须放几个隐藏控件以便回传js选取的坐标。

其中剪切图片源码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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中剪切,可回传文件流。用参数传递坐标。   

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
    
  
}


相关教程