یکی از مسائلی که در هنگام سرعت لود صفحات مهم است بحث حجم تصاویر است که باید دقت نمود در هنگام آپلود تغییر سایز داده و دارای حجم متناسبی جهت بارگذاری گردد. در این مقاله به کاهش حجم عکس در MVC هنگام آپلود میپردازیم تا ببینیم این مهم چگونه انجام میشود.
کاهش حجم عکس در MVC هنگام آپلود
روشهای مختلفی برای این کار وجود دارد اما بهصورت ساده میتوانید در پروژههای خود از تابع زیر برای کاهش حجم تصاویرتان استفاده کنید. پارامترهای این تابع بهگونهای طراحیشده است که میتواند قابلیت میزان بزرگ نمایی و کوچک نمایی را داشته باشد.
public void ImageCompression(double scaleFactor, Stream sourcePath, string targetPath) { using (var image = System.Drawing.Image.FromStream(sourcePath)) { var newWidth = (int)(image.Width * scaleFactor); var newHeight = (int)(image.Height * scaleFactor); var thumbnailImg = new Bitmap(newWidth, newHeight); var thumbGraph = Graphics.FromImage(thumbnailImg); thumbGraph.CompositingQuality = CompositingQuality.HighQuality; thumbGraph.SmoothingMode = SmoothingMode.HighQuality; thumbGraph.InterpolationMode = InterpolationMode.HighQualityBicubic; var imageRectangle = new Rectangle(0, 0, newWidth, newHeight); thumbGraph.DrawImage(image, imageRectangle); thumbnailImg.Save(targetPath, image.RawFormat); } }
در تابع بالا میتوان از طریق پارامتر ScaleFactor میزان تغییر سایز عکس را تنظیم کرد.
- اگر این میزان بین ۰ تا ۱ باشد، عکس کوچکتر خواهد شد.
- اگر مقدار آن برابر یک باشد، تغییری حاصل نمیگردد.
- اگر بزرگتر از یک باشد، به همان میزان عکس چند برابر بزرگتر میشود.
نکته: در هر سه حالت فوق حجم عکس تغییر خواهد کرد.
نحوه فراخوانی تابع
string savepath = String.Format(Request.PhysicalApplicationPath + "Images\\{0}", FileUpload1.FileName); Stream strm = FileUpload1.PostedFile.InputStream; ImageCompression(0.5, strm, savepath);