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

 更新时间:2014年07月28日 10:04:34   投稿:shichen2014  
这篇文章主要介绍了.net实现裁剪网站上传图片的方法,比较实用的功能,需要的朋友可以参考下

本文实例讲述了基于.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;  
    }  
  }  
}

相关文章

  • C#的自定义语法糖的使用详解

    C#的自定义语法糖的使用详解

    这篇文章主要介绍了C#的自定义语法糖的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 桌面浮动窗口(类似恶意广告)的实现详解

    桌面浮动窗口(类似恶意广告)的实现详解

    本篇文章是对桌面浮动窗口的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • C#实现钟表程序设计

    C#实现钟表程序设计

    这篇文章主要为大家详细介绍了C#实现钟表程序设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 关于C#中async/await的用法实例详解

    关于C#中async/await的用法实例详解

    这篇文章主要介绍了关于C#中async/await的用法,今天写一个demo彻底搞明白async/await的用法,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • 一文搞懂c# await,async执行流

    一文搞懂c# await,async执行流

    这篇文章主要介绍了c# await,async执行流的相关知识,文章讲解的非常细致,代码帮助理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • AOP从静态代理到动态代理(Emit实现)详解

    AOP从静态代理到动态代理(Emit实现)详解

    AOP为Aspect Oriented Programming的缩写,意思是面向切面编程的技术。下面这篇文章主要给大家介绍了关于AOP从静态代理到动态代理(Emit实现)的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-09-09
  • C#实现List.Sort()使用小计

    C#实现List.Sort()使用小计

    在C#开发中,List是常见的一种集合类型,其提供了一个 Sort() 方法来实现对集合的排序,本文主要介绍了C#实现List.Sort()使用小计,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • C#中WPF使用多线程调用窗体组件的方法

    C#中WPF使用多线程调用窗体组件的方法

    这篇文章主要介绍了C#中WPF使用多线程调用窗体组件的方法,涉及C#中多线程的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C#函数式编程中的标准高阶函数详解

    C#函数式编程中的标准高阶函数详解

    这篇文章主要介绍了C#函数式编程中的标准高阶函数详解,本文讲解了何为高阶函数、Map、 Filter、Fold等内容,需要的朋友可以参考下
    2015-01-01
  • C#基于COM方式读取Excel表格的方法

    C#基于COM方式读取Excel表格的方法

    这篇文章主要介绍了C#基于COM方式读取Excel表格的方法,涉及C# COM组件的调用与Excel表格的使用技巧,需要的朋友可以参考下
    2016-07-07

最新评论