آپلود و برش تصاویر با استفاده از Jcrop,Jquery در Asp.Net

شنبه 11 مهر 1394

در این مقاله قصد داریم که با استفاده از یک FileUpload ، کاربر عکس مورد نظر را بتواند آپلود کند و بتواند عکس آپلود شده را ببیند و با استفاده از Jcrop عکس مورد نظر را برش دهد.

آپلود و برش تصاویر با استفاده از Jcrop,Jquery در Asp.Net

در این مقاله به کتابخانه ی جی کوئری نیاز دارید و همین طور کتابخانه جی کوئری Jcrop ،در این نمونه دو

Panel قرار می دهید که زمانی که عکس خود را می خواهید آپلود کنید پنل شماره 1 فعال می شود و زمانی

که بخواهید عکس خود را برش دهید پنل شماره 2 فعال خواهد شد.

داخل صفحه ی DesignUI قطعه کد مورد نظر را می نویسید:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication5.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body dir="rtl">
    <form id="form1" runat="server">
    <div>
        
         <asp:Panel ID="pnlUpload" runat="server">

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

      <br />

      <asp:Button ID="btnUpload" runat="server" OnClick="btnUpload_Click" Text="آپلود عکس" />

      <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="برش تصویر" OnClick="btnCrop_Click" />

    </asp:Panel>

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

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

    </asp:Panel>
    
    </div>
    </form>
</body>
</html>

باید حتما فایل CssوJquery را در Head صفحه ی خود اضافه کنید.

<link href="css/jquery.Jcrop.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script type="text/javascript" src="script/jquery.Jcrop.pack.js"></script>

در مرحله ی بعد باید Script را به نمونه ی خود اضافه نمایید.

<script type="text/javascript">

  jQuery(document).ready(function() {

    jQuery('#imgCrop').Jcrop({

      onSelect: storeCoords

    });

  });

 

  function storeCoords(c) {

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

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

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

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

  };

 

</script>

در اسکریپت بالا شما می توانید عکس را به اندازه ی X,Y,W,H تنظیم نمایید.و به اندازه ی دلخواه آن را برش دهید.

حالا داخل Code Behind نیاز هست که شما 4 Namesapce زیر را اضافه کنید:

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_OnClick(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 = "فایل را نمی تواند آپلود کند" + ex.Message.ToString();

                    lblError.Visible = true;

                    FileSaved = false;

                }

            }

            else
            {

                lblError.Text = "نوع فایل انتخابی اشتباه است";

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

  }

}

در کد بالا به صورت آرایه ای از بایت MemoryStream را نوشته است که می توان آن را مورد استفاده قرار

داد و تبدیل به یک تصویر آن را برگرداند.

حال زمانی که نمونه را اجرا بگیرید به صورت زیر خواهد بود

 

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید