UploadAndCrop 图片裁剪

学无止境 曾祥展 
<link href="css/jquery.Jcrop.css" rel="stylesheet" type="text/css" />

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.Jcrop.min.js"></script>
<script type="text/javascript">

  $(document).ready(function() {
    $('#imgCrop').Jcrop({
        onSelect: storeCoords
    });

  });
 
  function storeCoords(c) {

    $('#X').val(c.x);

    $('#Y').val(c.y);

    $('#W').val(c.w);

    $('#H').val(c.h);

  };


</script>

 

 

 

 

<div>

    <asp:Panel ID="pnlUpload" runat="server">
    
      <asp:FileUpload ID="Upload" runat="server" />      <br />
      
      <asp:Button ID="btnUpload" runat="server" OnClick="btnUpload_Click" Text="Upload" />
      
      <asp:Label ID="lblError" runat="server" Visible="false" />
      
    </asp:Panel>

    <asp:Panel ID="pnlCrop" runat="server" Visible="false">
    
      <asp:Image ID="imgCrop" runat="server" />      <br />

      <asp:HiddenField ID="X" runat="server" />

      <asp:HiddenField ID="Y" runat="server" />

      <asp:HiddenField ID="W" runat="server" />

      <asp:HiddenField ID="H" runat="server" />

      <asp:Button ID="btnCrop" runat="server" Text="Crop" OnClick="btnCrop_Click" />

    </asp:Panel>

    <asp:Panel ID="pnlCropped" runat="server" Visible="false">

      <asp:Image ID="imgCropped" runat="server" />

    </asp:Panel>

  </div>

 

 

using System.IO;
using SD=System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

 

String path = HttpContext.Current.Request.PhysicalApplicationPath + "images\\";

   protected void Page_Load(object sender, EventArgs e)
   {
   }
   
   protected void btnUpload_Click(object sender, EventArgs e)
   {
       Boolean FileOK = false;
       Boolean FileSaved = false;
       if (Upload.HasFile)
       {
           Session["WorkingImage"] = Upload.FileName;            
           String FileExtension = Path.GetExtension(Session["WorkingImage"].ToString()).ToLower();
           String[] allowedExtensions = { ".png", ".jpeg", ".jpg", ".gif" };
           for (int i = 0; i < allowedExtensions.Length; i++)
           {
               if (FileExtension == allowedExtensions[i])
               {
                   FileOK = true;
               }
           }
       }
       if (FileOK)
       {
           try
           {
               Upload.PostedFile.SaveAs(path + Session["WorkingImage"]);
               FileSaved = true;
           }
           catch (Exception ex)
           {
               lblError.Text = "File could not be uploaded." + ex.Message.ToString();
               lblError.Visible = true;
               FileSaved = false;
           }
       }
       else
       {
           lblError.Text = "Cannot accept files of this type.";
           lblError.Visible = true;
       }
       
       if (FileSaved)
       {
           pnlUpload.Visible = false;            
           pnlCrop.Visible = true;
           imgCrop.ImageUrl = "images/" + Session["WorkingImage"].ToString();
       }
   }



  protected void btnCrop_Click(object sender, EventArgs e)
  {
      string ImageName = Session["WorkingImage"].ToString();
      int w = Convert.ToInt32(W.Value);
      int h = Convert.ToInt32(H.Value);
      int x = Convert.ToInt32(X.Value);
      int y = Convert.ToInt32(Y.Value);
      byte[] CropImage = Crop(path + ImageName, w, h, x, y);
      using (MemoryStream ms = new MemoryStream(CropImage, 0, CropImage.Length))
      {
          ms.Write(CropImage, 0, CropImage.Length);
          using (SD.Image CroppedImage = SD.Image.FromStream(ms, true))
          {
              string SaveTo = path + "crop" + ImageName;
              CroppedImage.Save(SaveTo, CroppedImage.RawFormat);
              pnlCrop.Visible = false;
              pnlCropped.Visible = true;
              imgCropped.ImageUrl = "images/crop" + ImageName;
          }
      }
  }
   
   static byte[] Crop(string Img, int Width, int Height, int X, int Y)
   {
       try
       {
           using (SD.Image OriginalImage = SD.Image.FromFile(Img))
           {                
               using (SD.Bitmap bmp = new SD.Bitmap(Width, Height))
               {
                   bmp.SetResolution(OriginalImage.HorizontalResolution, OriginalImage.VerticalResolution);                    
                   using (SD.Graphics Graphic = SD.Graphics.FromImage(bmp))
                   {
                      Graphic.SmoothingMode = SmoothingMode.AntiAlias;
                      Graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
                      Graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
                      Graphic.DrawImage(OriginalImage, new SD.Rectangle(0, 0, Width, Height), X, Y, Width, Height, SD.GraphicsUnit.Pixel);
                      MemoryStream ms = new MemoryStream();
                      bmp.Save(ms, OriginalImage.RawFormat);
                      return ms.GetBuffer();
                  }
              }
          }
      }
       catch (Exception Ex)
       {
           throw (Ex);
       }
   }
posted @ 2009-12-27 22:47  曾祥展  阅读(1632)  评论(6编辑  收藏  举报