Asp.net 裁剪头像(使用Jcrop,有Jcrop在IE下不起作用解决办法)

近来做了个项目,需要上传一个图片,然后选择区域,裁剪做为头像

使用的是Jcrop (官网为:http://deepliquid.com/content/Jcrop.html),官网有示例。

但是里面的Jquery的方法执行的时候在IE和非IE有不同的表现

  • 在非IE下,例如Chrome下,如下这样写是没问题的,但是在IE下(例如IE9),却经常没有执行,反正问题是很奇怪
View Code
1         jQuery(document).ready(function () {

2             jQuery('#imgCrop').Jcrop({

3                 aspectRatio: 1,

4                 onSelect: storeCoords

5             });

6         });
  • 在IE下,如下这样写,一定执行,但是Chrome下却不执行
View Code
1         jQuery(document).ready(function () {

2             var api = $.Jcrop('#imgCrop', {

3                 aspectRatio: 1,

4                 onSelect: storeCoords

5             });

6         });
  • 所以我选了一个折冲的方案,就是手动执行这个Jquery

我的代码如下

前台页面j代码

View Code
 1 <html xmlns="http://www.w3.org/1999/xhtml">

 2 <head>

 3     <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />

 4     <title></title>

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

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

 7     <link rel="stylesheet" href="css/jquery.Jcrop.css" type="text/css" />

 8     <script type="text/javascript">

 9 //        jQuery(document).ready(function () {

10 //            jQuery('#imgCrop').Jcrop({

11 //                aspectRatio: 1,

12 //                onSelect: storeCoords

13 //            });

14 //        });

15 

16         function storeCoords(c) {

17             jQuery('#X').val(c.x);

18             jQuery('#Y').val(c.y);

19             jQuery('#W').val(c.w);

20             jQuery('#H').val(c.h);

21         }

22 

23         //为了能保证有执行到如下的代码,但又不至于每次移动鼠标都执行,所有做了如下恶心的操作

24         var isStart = 0;

25         function startCrop() {

26             if (isStart < 2) {

27                 jQuery('#imgCrop').Jcrop({

28                     aspectRatio: 1,

29                     onSelect: storeCoords

30                 });

31                 isStart++;

32             }

33         }

34     </script>

35 </head>

36 <body>

37     <form id="form1" runat="server">

38     <div onmousemove="startCrop()">

39         <asp:Panel ID="pnlUpload" runat="server">

40             <asp:FileUpload ID="Upload" runat="server" />

41             <br />

42             <asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />

43             <asp:Label ID="lblError" runat="server" Visible="false" />

44         </asp:Panel>

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

46             <asp:Image ID="imgCrop" runat="server" />

47             <br />

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

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

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

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

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

53         </asp:Panel>

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

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

56         </asp:Panel>

57     </div>

58     </form>

59 </body>

60 </html>

后台代码

View Code
  1 using System;

  2 using System.Collections.Generic;

  3 using System.Linq;

  4 using System.Web;

  5 using System.Web.UI;

  6 using System.Web.UI.WebControls;

  7 

  8 using System.IO;

  9 using SD = System.Drawing;

 10 using System.Drawing.Imaging;

 11 using System.Drawing.Drawing2D;

 12 

 13 

 14 namespace HeadProject

 15 {

 16     public partial class Index : System.Web.UI.Page

 17     {

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

 19 

 20         protected void Page_Load(object sender, EventArgs e)

 21         { 

 22 

 23         }

 24 

 25         protected void btnUpload_Click(object sender, EventArgs e)

 26         {

 27             Boolean FileOK = false;

 28             Boolean FileSaved = false;

 29 

 30             if (Upload.HasFile)

 31             {

 32                 Session["WorkingImage"] = Upload.FileName;

 33                 String FileExtension = Path.GetExtension(Session["WorkingImage"].ToString()).ToLower();

 34                 String[] allowedExtensions = { ".png", ".jpeg", ".jpg", ".gif" };

 35                 for (int i = 0; i < allowedExtensions.Length; i++)

 36                 {

 37                     if (FileExtension == allowedExtensions[i])

 38                     {

 39                         FileOK = true;

 40                     }

 41                 }

 42             }

 43 

 44             if (FileOK)

 45             {

 46                 try

 47                 {

 48                     Upload.PostedFile.SaveAs(path + Session["WorkingImage"]);

 49                     FileSaved = true;

 50                 }

 51                 catch (Exception ex)

 52                 {

 53                     lblError.Text = "File could not be uploaded." + ex.Message.ToString();

 54                     lblError.Visible = true;

 55                     FileSaved = false;

 56                 }

 57             }

 58             else

 59             {

 60                 lblError.Text = "Cannot accept files of this type.";

 61                 lblError.Visible = true;

 62             }

 63 

 64             if (FileSaved)

 65             {

 66                 pnlUpload.Visible = false;

 67                 pnlCrop.Visible = true;

 68                 imgCrop.ImageUrl = "images/" + Session["WorkingImage"].ToString();

 69             }

 70         }

 71 

 72         protected void btnCrop_Click(object sender, EventArgs e)

 73         {

 74             string ImageName = Session["WorkingImage"].ToString();

 75             int w = Convert.ToInt32(W.Value);

 76             int h = Convert.ToInt32(H.Value);

 77             int x = Convert.ToInt32(X.Value);

 78             int y = Convert.ToInt32(Y.Value);

 79 

 80             byte[] CropImage = Crop(path + ImageName, w, h, x, y);

 81             using (MemoryStream ms = new MemoryStream(CropImage, 0, CropImage.Length))

 82             {

 83                 ms.Write(CropImage, 0, CropImage.Length);

 84                 using (SD.Image CroppedImage = SD.Image.FromStream(ms, true))

 85                 {

 86                     string SaveTo = path + "crop" + ImageName;

 87                     CroppedImage.Save(SaveTo, CroppedImage.RawFormat);

 88                     pnlCrop.Visible = false;

 89                     pnlCropped.Visible = true;

 90                     imgCropped.ImageUrl = "images/crop" + ImageName;

 91                 }

 92             }

 93         }

 94 

 95         static byte[] Crop(string Img, int Width, int Height, int X, int Y)

 96         {

 97             try

 98             {

 99                 using (SD.Image OriginalImage = SD.Image.FromFile(Img))

100                 {

101                     using (SD.Bitmap bmp = new SD.Bitmap(Width, Height, OriginalImage.PixelFormat))

102                     {

103                         bmp.SetResolution(OriginalImage.HorizontalResolution, OriginalImage.VerticalResolution);

104                         using (SD.Graphics Graphic = SD.Graphics.FromImage(bmp))

105                         {

106                             Graphic.SmoothingMode = SmoothingMode.AntiAlias;

107                             Graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;

108                             Graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;

109                             Graphic.DrawImage(OriginalImage, new SD.Rectangle(0, 0, Width, Height), X, Y, Width, Height, SD.GraphicsUnit.Pixel);

110                             MemoryStream ms = new MemoryStream();

111                             bmp.Save(ms, OriginalImage.RawFormat);

112                             return ms.GetBuffer();

113                         }

114                     }

115                 }

116             }

117             catch (Exception Ex)

118             {

119                 throw (Ex);

120             }

121         }

122     }

123 }

 

 

 

你可能感兴趣的:(asp.net)