ネットで裁断サイトから画像をアップロードする方法を実現します.

3969 ワード

本論文の実例は.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)asxで切り取り、ファイルフローをリピートすることができます.座標をパラメータで伝える.   

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;  
    }  
  }  
}