آموزش تغییر اندازه و فشرده سازی تصاویر در MVC 5
1 0

آموزش تغییر اندازه و فشرده سازی تصاویر در MVC 5


تغییر اندازه و فشرده سازی تصاویر در MVC 5

در این پست قصد داریم تا نحوه کار با تصاویر و فشرده سازی تصاویر را Asp.Net MVC 5 مورد بررسی قرار دهیم.

در بعضی مواقع شما نیاز دارید تا تصاویری که در سایت آپلود می کنید تغییر اندازه دهید، طول یا عرض تصاویر را کم و زیاد کنید و یا حجم آنها را کاهش دهید.

 

برای شروع یک کلاس به نام ImagesHelper ایجاد کنید و کدهای زیر را به آن اضافه کنید.

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;


public static class ImagesHelper
{

    public enum ImageComperssion
    {
        Maximum = 50,
        Good = 60,
        Normal = 70,
        Fast = 80,
        Minimum = 90,
    }

    public static void ResizeImage(this Stream inputStream, int width, int height, string savePath, ImageComperssion ic = ImageComperssion.Normal)
    {
        System.Drawing.Image img = new Bitmap(inputStream);
        System.Drawing.Image result = new Bitmap(width, height, PixelFormat.Format24bppRgb);
        using (Graphics g = Graphics.FromImage(result))
        {
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.DrawImage(img, 0, 0, width, height);
        }
        result.CompressImage(savePath, ic);
    }

    public static void ResizeImage(this System.Drawing.Image img, int width, int height, string savePath, ImageComperssion ic = ImageComperssion.Normal)
    {
        System.Drawing.Image result = new Bitmap(width, height, PixelFormat.Format24bppRgb);
        using (Graphics g = Graphics.FromImage(result))
        {
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.DrawImage(img, 0, 0, width, height);
        }
        result.CompressImage(savePath, ic);
    }

    public static void ResizeImageByWidth(this Stream inputStream, int width, string savePath, ImageComperssion ic = ImageComperssion.Normal)
    {
        System.Drawing.Image img = new Bitmap(inputStream);
        int height = img.Height * width / img.Width;
        System.Drawing.Image result = new Bitmap(width, height, PixelFormat.Format24bppRgb);
        using (Graphics g = Graphics.FromImage(result))
        {
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.DrawImage(img, 0, 0, width, height);
        }
        result.CompressImage(savePath, ic);
    }

    public static void ResizeImageByWidth(this System.Drawing.Image img, int width, string savePath, ImageComperssion ic = ImageComperssion.Normal)
    {
        int height = img.Height * width / img.Width;
        System.Drawing.Image result = new Bitmap(width, height, PixelFormat.Format24bppRgb);
        using (Graphics g = Graphics.FromImage(result))
        {
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.DrawImage(img, 0, 0, width, height);
        }
        result.CompressImage(savePath, ic);
    }

    public static void ResizeImageByHeight(this Stream inputStream, int height, string savePath, ImageComperssion ic = ImageComperssion.Normal)
    {
        System.Drawing.Image img = new Bitmap(inputStream);
        int width = img.Width * height / img.Height;
        System.Drawing.Image result = new Bitmap(width, height, PixelFormat.Format24bppRgb);
        using (Graphics g = Graphics.FromImage(result))
        {
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.DrawImage(img, 0, 0, width, height);
        }
        result.CompressImage(savePath, ic);
    }

    public static void ResizeImageByHeight(this System.Drawing.Image img, int height, string savePath, ImageComperssion ic = ImageComperssion.Normal)
    {
        int width = img.Width * height / img.Height;
        System.Drawing.Image result = new Bitmap(width, height, PixelFormat.Format24bppRgb);
        using (Graphics g = Graphics.FromImage(result))
        {
            g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            g.DrawImage(img, 0, 0, width, height);
        }
        result.CompressImage(savePath, ic);
    }

    public static void CompressImage(this System.Drawing.Image img, string path, ImageComperssion ic)
    {
        System.Drawing.Imaging.EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Convert.ToInt32(ic));
        ImageFormat format = img.RawFormat;
        ImageCodecInfo codec = ImageCodecInfo.GetImageDecoders().FirstOrDefault(c => c.FormatID == format.Guid);
        string mimeType = codec == null ? "image/jpeg" : codec.MimeType;
        ImageCodecInfo jpegCodec = null;
        ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
        for (int i = 0; i < codecs.Length; i++)
        {
            if (codecs[i].MimeType == mimeType)
            {
                jpegCodec = codecs[i];
                break;
            }
        }
        EncoderParameters encoderParams = new EncoderParameters(1);
        encoderParams.Param[0] = qualityParam;
        img.Save(path, jpegCodec, encoderParams);
    }
}

متدهای کلاس ImagesHelper

کلاس فوق 5 متد و یک enum دارد که درصد فشرده سازی را مشخص می کند.

متد ResizeImage

این متد یک تصویر ، طول و عرض تصویر ، مسیر آپلود تصویر و نوع فشرده سازی تصویر را دریافت و تصویر را آپلود می کند.

متد ResizeImageByWidth

این متد یک تصویر ، فقط عرض تصویر ، مسیر آپلود تصویر و نوع فشرده سازی تصویر را دریافت و تصویر را آپلود می کند.

متد ResizeImageByHeight

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

متد CompressImage

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

 

نحوه کار با متدهای کلاس ImagesHelper

ابتدا یک ActionResult با هر نامی که مد نظر دارید ایجاد کنید.(ما همان Index را درنظر گرفتیم)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace ResizeImage.Controllers
{
    public class HomeController : Controller
    {
        
        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Index(HttpPostedFileBase image)
        {
            string path = Server.MapPath("~/Images/" + image.FileName);
            image.InputStream.ResizeImage(250, 200, path, ImagesHelper.ImageComperssion.Normal);
            Response.Write("<script language='javascript'>alert('تصویر با موفقیت آپلود شد')</script");
            return View();
        }
    }
}

زمانی که اطلاعات به سمت سرور ارسال می شود ActionResult با نوع پست اجرا می شود.

ابتدا از HttpPostedFileBase یک نمونه به نام image ساختیم که هم نام با نامی است که در View مورد نظر برای تگ آپلود در نظر گرفتیم.

ابتدا مسیر آپلود تصویر و نام تصویر را در متغیری به نام path قرار می دهیم.

 چون در متدهای کلاس ImagesHelper برای دریافت تصویر از کلمه کلیدی this استفاده کردیم. پس با نوشته کلمه image می توان به متدهای کلاس ImagesHelper دسترسی داشت و سپس ورودی های متد فوق را وارد کرد. یعنی image را به عنوان تصویر ارسالی در نظر میگیرد.

 

View اکشن ریزالت Index


@{
    ViewBag.Title = "Index";
}

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { @enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()

    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <input type="file" id="image" name="image"/>
    <input type="submit" value="ثبت" class="btn btn-default" />
}

در ویو فوق فقط یک دکمه و تگ فایل آپلود را قرار داده ایم و همچنین enctype برابر  multipart/form data قرار داده ایم تا بتوانیم یک فایل یا تصویر به سرور ارسال کنیم.

دانلود

نویسنده حسین فتحی
گروه مطلب MVC
نوع مطلب سورس کد و آموزش
تاریخ انتشار ۵ مرداد ۱۳۹۵
منبع ایران گنج
تعداد نظرات ۰
قیمت کاربران عضو سایت
توضیح توجه:
  • زمانی که روی لینک دانلود کلیک می کنید لینک دانلود به مدت 24 ساعت معتبر خواهد بود
  • لینک های دانلود دوره های آموزشی تا پایان دوره قابل دانلود می باشد.
  • برای خارج کردن فایل ها از حالت فشرده از ورژن جدید نرم افزار winrar استفاده کنید.
  • برای خارج کردن فایل ها از حالت فشرده لینک های دانلودی که چندین قسمت می باشند فقط قسمت اول را از حالت فشرده خارج کنید.
  • لطفا توضیحات نوشته شده برای مطالب را با دقت بخوانید.
  • برای نمایش فیلم ها می توانید از نرم افزار هایی مانند Km Player , VLC Player یا Media Player Classic استفاده کنید.

نظر / سوال

Captcha