کاهش کیفیت تصویر توسط C#

یکشنبه 26 بهمن 1399

برای سرعت بخشیدن به بارگذاری سایت خود می توانید کیفیت عکس ها را کاهش دهید

کاهش کیفیت تصویر توسط C#

کاهش اندازه تصویر برای سرعت سایت مهم است زیرا سرعت بارگذاری سایت افزایش می یابد

امروز نحوه افزایش اندازه سایت را به شما آموزش می دهم

 

در حالی که این سایت را ایجاد می کردم ، در مورد همان موضوع تحقیق می کردم که به پیوندی برخوردم که کد را نوشت.

private void VaryQualityLevel()  
    {  
        // Get a bitmap. The using statement ensures objects  
        // are automatically disposed from memory after use.  
        using (Bitmap bmp1 = new Bitmap(@"C:\TestPhoto.jpg"))  
        {  
            ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);  
  
            // Create an Encoder object based on the GUID  
            // for the Quality parameter category.  
            System.Drawing.Imaging.Encoder myEncoder =  
                System.Drawing.Imaging.Encoder.Quality;  
  
            // Create an EncoderParameters object.  
            // An EncoderParameters object has an array of EncoderParameter  
            // objects. In this case, there is only one  
            // EncoderParameter object in the array.  
            EncoderParameters myEncoderParameters = new EncoderParameters(1);  
  
            EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);  
            myEncoderParameters.Param[0] = myEncoderParameter;  
            bmp1.Save(@"c:\TestPhotoQualityFifty.jpg", jpgEncoder, myEncoderParameters);  
  
            myEncoderParameter = new EncoderParameter(myEncoder, 100L);  
            myEncoderParameters.Param[0] = myEncoderParameter;  
            bmp1.Save(@"C:\TestPhotoQualityHundred.jpg", jpgEncoder, myEncoderParameters);  
  
            // Save the bitmap as a JPG file with zero quality level compression.  
            myEncoderParameter = new EncoderParameter(myEncoder, 0L);  
            myEncoderParameters.Param[0] = myEncoderParameter;  
            bmp1.Save(@"C:\TestPhotoQualityZero.jpg", jpgEncoder, myEncoderParameters);  
        }  
    }

Using ها را وارد کنید

using System.Drawing;

using System.Drawing.Imaging;

این کد قسمت های مختلفی دارد ، اما قسمت مهم را توضیح می دهم

مثلا:

این کد عکس مورد نظر را از شما می گیرد

using (Bitmap bmp1 = new Bitmap(@"C:\TestPhoto.jpg"))

و قسمت مهم

 این قسمت ایجاد کیفیت عکس جدید را تنظیم میکند

EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);  
            myEncoderParameters.Param[0] = myEncoderParameter;  
            bmp1.Save(@"c:\TestPhotoQualityFifty.jpg", jpgEncoder, myEncoderParameters);

این عدد در انتهای خط اول کیفیت را تنظیم می کند و می تواند از 0 تا 100 (50L) تنظیم شود

خوب اگر از این کد در Asp.Net MVC استفاده می کنید احتمالاً خطایی ایجاد می کند

 

و حالا پیشنهاد من

 

پیشنهاد من این است که کمی این کد را تغییر دهید

 

var GuidRan = Guid.NewGuid();

var Format = Path.GetExtension(imgUp.FileName);

    page.ImageName = GuidRan + Path.GetExtension(imgUp.FileName);

    imgUp.SaveAs(Server.MapPath("/PageImages/" + page.ImageName));

FileInfo imgInfo = new FileInfo(Server.MapPath("/PageImages/" + page.ImageName));

    if (imgInfo.Length > 1000000)

    {

        using (Bitmap bmp1 = new Bitmap(Server.MapPath("/PageImages/" + page.ImageName)))

        {

System.Drawing.Imaging.ImageCodecInfo GetEncoder(System.Drawing.Imaging.ImageFormat format)

            {

                var codecs = System.Drawing.Imaging.ImageCodecInfo.GetImageDecoders();

                foreach (var codec in codecs)

                {

       if (codec.FormatID == format.Guid)

                    {

                        return codec;

                    }

                }

                return null;

            }

var jpgEncoder = GetEncoder(System.Drawing.Imaging.ImageFormat.Jpeg);

System.Drawing.Imaging.Encoder myEncoder =

System.Drawing.Imaging.Encoder.Quality;

EncoderParameters myEncoderParameters = new EncoderParameters(1);

EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);

myEncoderParameters.Param[0] = myEncoderParameter;

bmp1.Save(Server.MapPath(@"/PageImages/" + GuidRan), jpgEncoder, myEncoderParameters);

        }

        System.IO.File.Delete(Server.MapPath("/PageImages/" + page.ImageName));

        System.IO.File.Copy(Server.MapPath("/PageImages/") + GuidRan,

            Server.MapPath("/PageImages/") + GuidRan + Format, true);

        System.IO.File.Delete(Server.MapPath("/PageImages/") + GuidRan);

    }

در اینجا نیز از این استفاده کنید

using System.IO;

در اینجا نیز از این استفاده کنید

 

این اولین کدی است که کمی تغییر کرده است

 

خوب ، بیایید به سراغ تغییراتی برویم که برای شما توضیح می دهند

 

در اینجا من از Guid استفاده کردم تا عکسها یکسان به نظر برسند و از متغیری به نام GuidRan استفاده کردم

 

سپس مجبور شدم فرمت تصویری بگیرم و آن را در یک متغیر با خطا نگه دارم

var Format = Path.GetExtension(imgUp.FileName);

سپس عکس را ذخیره می کنم

 

و در سطر بعدی آدرس فایل ذخیره شده را به کد کاهش حجم می دهم

 

در داخل بخش ، تغییر دیگری را مشاهده خواهید کرد که در محل آدرس دهی است

Server.MapPath

این به محل پروژه می رود

 

نکته!

 

هنگام آزمایش پروژه ، متوجه شدم که اگر تصویر زیر 1 مگابایت باشد ، تصویر مانند تصویر زیر است

 

 

 

 

این عکس در کل 261 کیلوبایت است و پس از کاهش اندازه عکس ، به این شکل است

 

بقیه قسمتها مانند گذشته است ، به جز آخرین کدی که به یاد دارید ، من به خطایی اشاره کردم که به قالب اشاره داشت. خوب ، من با کمی خلاقیت این خطا را برطرف کردم.

 

در اینجا مراحل گرفتن عکس و ذخیره ...

تا به شما عزیزان با شماره بگویید

1-گرفتن عکس از کاربر

2-عکس دوم را ذخیره کنید

 

هنگام ذخیره تصویر دوم ، پسوند پرونده وارد نمی شود

 

پس از System.IO به ما کمک می کنیم

 

ابتدا عکسی را که از کاربر گرفته ایم حذف می کنیم (عکس با کیفیت)

 

پس از عکس ، پسوند را کپی کرده و به یک عکس با پسوند تبدیل کنید

 

سپس عکس را بدون پسوند حذف می کنیم

 

به همین راحتی

 

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

 

با تشکر از Microsoft🙏

این مقاله به صورت زبان اینگلیسی در سایت ToProgramming.com موجود است

https://toprogramming.com/Post/1

sinahabibi

نویسنده 1 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 2 تشکر

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

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

نظرات کاربران

برای درج نظر باید وارد سایت شوید