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

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

其中剪切图片源码如下:

usingSystem; 
usingSystem.Collections.Generic; 
usingSystem.Text; 
usingSystem.Drawing; 
  
publicclassCut  
{ 
  /// <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>  
  publicstaticvoid CutImage(stringsourceImg,stringdesImg,intleft,inttop,intwidth,intheight) 
  { 
    System.Drawing.Image img = System.Drawing.Bitmap.FromFile(sourceImg);  
    System.Drawing.Image imgToSave = newSystem.Drawing.Bitmap(width, height);  
    System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(imgToSave);  
    RectangleF sourceRect = newRectangleF(left, top, width, height);  
    RectangleF destinationRect = 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(HttpContext context)  
  { 
    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); 
  } 
  
  publicMemoryStream ResetImg(HttpContext context, stringImgFile,intPicWidth,intPicHeight,intPointX,intPointY,intCutWidth,intCutHeight) 
  { 
    Image imgPhoto = Image.FromFile(ImgFile);  
    Bitmap bmPhoto = newBitmap(CutWidth, CutHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);  
  
    Graphics gbmPhoto = 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);  
  
    //生成文件流回传 
    MemoryStream ms2 = newMemoryStream(); 
    bmPhoto.Save(ms2, System.Drawing.Imaging.ImageFormat.Jpeg);  
  
    imgPhoto.Dispose(); 
    gbmPhoto.Dispose(); 
    bmPhoto.Dispose(); 
  
    returnms2; 
  } 
  
  
  publicboolIsReusable  
  { 
    get
    { 
      returnfalse; 
    } 
  } 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值