WEB开发网
开发学院网页设计JavaScript js + .Net 图片切割系统 阅读

js + .Net 图片切割系统

 2010-09-14 13:24:56 来源:WEB开发网   
核心提示: 如果需要保存图片到服务器,那么可以用下面的方法保存图片:bmPhoto.Save(文件物理路径, System.Drawing.Imaging.ImageFormat.Jpeg);【IHttpHandler】程序通过ashx文件用IHttpHandler发送切割生成的图片,js + .Ne

如果需要保存图片到服务器,那么可以用下面的方法保存图片:

bmPhoto.Save(文件物理路径, System.Drawing.Imaging.ImageFormat.Jpeg);

【IHttpHandler】

程序通过ashx文件用IHttpHandler发送切割生成的图片,参考使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法:

“利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。这个文件特别适合于生成动态图片,生成动态文本等内容。”

最后设置数据输出类型context.Response.ContentType,并使用context.Response.OutputStream向客户端输出图片数据:

context.Response.ContentType = "image/jpeg";
ResetImg(System.Web.HttpContext.Current.Server.MapPath(Pic), PicWidth, PicHeight, PointX, PointY, CutWidth, CutHeight).WriteTo(context.Response.OutputStream);

这个输出数据的方法适合用在不需要回发的数据输出中,例如ajax、动态图片等,关于这方面更详细的内容请看IHttpHandler接口。

下面是完整服务器端代码:

Code

<%@ WebHandler Language="c#" Class="ImgCropper_WebHandler" Debug="true" %>
  
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(System.Web.HttpContext.Current.Server.MapPath(Pic), PicWidth, PicHeight, PointX, PointY, CutWidth, CutHeight).WriteTo(context.Response.OutputStream);
  }
  
  public MemoryStream ResetImg(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);
  
    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;
    }
  }
}

各位有什么建议或意见欢迎留言讨论,由于涉及后台操作,请下载完整实例测试。

上一页  1 2 3 4 

Tags:js Net 图片

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接