آپلود و برش تصاویر با استفاده از Jcrop,Jquery در Asp.Net
شنبه 11 مهر 1394در این مقاله قصد داریم که با استفاده از یک FileUpload ، کاربر عکس مورد نظر را بتواند آپلود کند و بتواند عکس آپلود شده را ببیند و با استفاده از Jcrop عکس مورد نظر را برش دهد.
در این مقاله به کتابخانه ی جی کوئری نیاز دارید و همین طور کتابخانه جی کوئری 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 را نوشته است که می توان آن را مورد استفاده قرار
داد و تبدیل به یک تصویر آن را برگرداند.
حال زمانی که نمونه را اجرا بگیرید به صورت زیر خواهد بود


- ASP.net
- 2k بازدید
- 3 تشکر