نحوه فشرده سازی تصاویر در Asp.Net
نحوه فشرده سازی تصاویر در Asp.Net
در این آموزش الگوریتمی معرفی می کنیم که با استفاده از این الگوریتم می توانید تصاویری با حجم 10 مگابایت و یا بیشتر را به 1 یا 2 مگابایت تبدیل کنید که هیچ افت کیفیتی در تصاویر فشرده سازی شده نداشته باشید.
تصاویری که با استفاده از دوربین های دیجیتال گرفته اید معمولا حجم آن ها بیش از 10 مگابایت می باشند. در صورتی که بخواهید آنها را به دوستان خود از اینترنت ارسال کنید زمانی زیادی طول می کشد ولی به استفاده از این الگوریتم می توانید این مشکل را حال کنید و حجم تصاویر خود را به راحتی بدون افت کیفیت کاهش دهید.
ابتدا یک صفحه Default.aspx ایجاد کنید و کدهای آن را به شکل زیر تفییر دهید.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>ایران گنج</title> </head> <body> <form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUpload1" runat="server" AllowMultiple="true" /> <asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" /> </div> </form> </body> </html>
قسمت کدهای سی شارپ آن به صورت زیر می باشد.
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } private ImageCodecInfo GetEncoder(ImageFormat format) { ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); foreach (ImageCodecInfo codec in codecs) { if (codec.FormatID == format.Guid) { return codec; } } return null; } public bool ThumbnailCallback() { return false; } protected void btnUpload_Click(object sender, EventArgs e) { string strCurentDate = DateTime.Now.Date.ToShortDateString(); string today_date = DateTime.Now.Date.ToShortDateString(); string strNewNumberDate = strCurentDate.Replace("/", "-"); Random random = new Random(); int totalnumber = 0; int intnumberrandoma = random.Next(1, 100); string eventnumber = strNewNumberDate + intnumberrandoma.ToString(); string target = Server.MapPath("~/clients/PhotoImage/thumb/"); System.Drawing.Image.GetThumbnailImageAbort thumbnailImageAbortDelegate = new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback); foreach (HttpPostedFile postedFile in FileUpload1.PostedFiles) { string contentType = postedFile.ContentType; using (Stream fs = postedFile.InputStream) { using (BinaryReader br = new BinaryReader(fs)) { string path = Server.MapPath("~/clients/PhotoImage/Image/"); int intnumberrandom = random.Next(20, 99999); string filename = string.Format("{0}_{1}{2}_{3}{4}", strNewNumberDate, User.Identity.Name, intnumberrandom.ToString(), totalnumber.ToString(), ".jpg"); string thumb = string.Format("{0}_{1}{2}_thumb{3}{4}", strNewNumberDate, User.Identity.Name, intnumberrandom.ToString(), totalnumber.ToString(), ".jpg"); // Get a bitmap. string pathbmpresult = string.Format("{0}{1}", path, filename); string pathbmp = string.Format("@{0}", pathbmpresult); string filename2 = Path.GetFileName(postedFile.FileName); string contentType2 = postedFile.ContentType; using (Bitmap originalImage = new Bitmap(postedFile.InputStream)) { ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg); System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality; EncoderParameters myEncoderParameters = new EncoderParameters(1); EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 40L); myEncoderParameters.Param[0] = myEncoderParameter; originalImage.Save(pathbmpresult, jgpEncoder, myEncoderParameters); } } } } } }
به صورت پیش فرض تا 4 مگابایت می توانید در Asp.Net تصاویر یا فایل آپلود کنید برای این که بتوانید تصاویر یا فایل های با حجم 20 مگابایت یا بیشتر در Asp.Net آپلود کنید باید تغییراتی در web.config انجام دهید که به صورت زیر می باشد.
<?xml version="1.0"?> <!-- For more information on how to configure your ASP.NET application, please visit http://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <system.web> <compilation debug="true" targetFramework="4.5" /> <httpRuntime maxRequestLength="50176" targetFramework="4.5"/> </system.web> <system.webServer> <validation validateIntegratedModeConfiguration="false"/> <security> <requestFiltering> <requestLimits maxAllowedContentLength="51380224"/> </requestFiltering> </security> </system.webServer> </configuration>
نظر / سوال