当前位置:  编程技术>.net/c#/asp.net

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

    来源: 互联网  发布时间:2014-10-31

    本文导语:  本文实例讲述了基于.net实现裁剪网站上传图片的方法。由于客户端Javascript不能操作文件,所以只能先上传图片再在服务器端剪切。 1、上传图片 2、Javascript剪切图片(其实只是选取要剪切的部分) 3、服务器端剪切   (1)...

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

其中剪切图片源码如下:

using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Drawing;  
 
public class Cut  
{  
  ///   
  /// 裁剪图片  
  ///   
  /// 原图片路径  
  /// 裁剪图片路径  
  /// X  
  /// Y  
  /// 宽  
  /// 高  
  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;  
    }  
  }  
}


    
 
 

您可能感兴趣的文章:

  • 利用java.net.URLConnection上传文件
  • asp.net超时时间与上传文件大小的设置方法
  • asp.net上传文件小例子
  • asp.net解决上传4M文件限制
  • asp.net使用jQuery Uploadify上传附件示例 iis7站长之家
  • asp.net 大文件上传问题的解决方法
  • .NET的file文件上传控件使用方法 修改web.config文件上传大文件
  • ASP.net WebAPI 上传图片实例
  • ASP.NET MVC处理文件上传的例子
  • ASP.NET中上传并读取Excel文件数据示例
  • asp.net上传并读取Excel文件的例子
  • asp.net 将图片上传到mysql数据库的方法
  • c# UpdatePanel无刷新上传图片 asp.net无刷新上传
  • asp.net上传图片加防伪图片水印并写入数据库的代码一例
  • asp.net上传execl文件后,在页面上加载显示(示例代码)
  • asp.net使用jQuery Uploadify上传附件示例
  • asp.net 上传下载(二进制流)的代码
  • asp.net 文件上传、下载(二进制流保存到数据库)的代码
  • (图文)asp.net 文件上传 带进度条(多种风格)
  • ASP.net判断上传文件类型的三种有效方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C#/.NET字符串加密和解密实现(AES和RSA代码举例)
  • asp.net 参数不同共用一个页面的实现方法
  • Asp.net防止重复提交的实现方法
  • ASP.NET MVC3 实现全站重定向的简单方法
  • .net中string实现无重复数字的代码一例
  • 内核源文件/net/socket.c中调用其他模块的函数,该如何实现
  • 用linux做服务器运行ASP.net网站,请问具体怎样实现??
  • asp.net session实现用户登录的疑问
  • asp.net用Zxing库实现条形码输出的具体实现
  • asp.net 实现php的md5()函数功能
  • asp.net后台弹窗怎么实现
  • c#(asp.net)实现的文件下载函数
  • asp.net后台弹窗如何实现
  • C#.NET程序添加到右键菜单的实现代码
  • .net压缩功能实现方法
  • asp.net文件分块下载的实现代码
  • vb.net实现后台发送短信的代码
  • asp.net 正则表达式匹配图片路径的实现代码
  • asp.net datalist绑定数据后可以上移下移实现示例
  • Asp.net设置GridView自适应列宽的实现代码
  • .net实现文件读写的几种常用方法
  • java命名空间javax.net类socketfactory的类成员方法: createsocket定义及介绍
  • .NET版的ExtJS库 Ext.Net
  • java命名空间java.net类datagramsocket的类成员方法: disconnect定义及介绍
  • node.js的.net扩展 node.net
  • java命名空间java.net类datagramsocket的类成员方法: close定义及介绍
  • 为什么输http://www.china-java.net,会自动改为http://www.china-java.net:8081?
  • java命名空间java.net接口cookiestore的类成员方法: get定义及介绍
  • 各位之不知道net-snmp是否收费?我的产品中用到了net-snmp lib是否需要向什么单位或者组织付费?
  • java命名空间java.net类socket的类成员方法: isbound定义及介绍
  • 【人才】有没有人会用VC6.0/VS2003.NET/VS2005.NET写WINDOWS下的驱动程序呀。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3