ASP.NET MVC Resim Küçültme

26.04.2020 14:41
#ASP.NET #MVC #RESIZE

ASP.NET MVC Resim Küçültme

    Yaptığımız projelerin neredeyse tamamında kullanıcılardan birçok sayfada resim yüklemelerini istiyoruz. Bu resim yükleme işlemleri sırasında ise kullanıcların yüksek boyutlu resim dosyaları yüklemeleri hem projelerin hızını, hem de depolama alanımızı olumsuz yönde etkiliyor. Bu durumda ASP.NET MVC de resim küçültme işlemi için yazdığım fonksiyon kullanılabilir. Bu sayede resim boyutu küçültme işlemi kolayca halledilmiş olur.

Aşağıda verdiğim fonksiyon ile bu işlemi kolayca yapabilirsiniz.

public string resimKucult(byte[] byteDizi, Stream stream, string dizin)
        {
            /******************
             * 
             * Tarih: 25.04.2020
             * Yazan: Yavuz ÇELİKER
             * Email: yavuz@yavuzceliker.com.tr
             * Amaç: Projeye yüklenen resimlerin resize edilmesini sağlayan fonksiyon.
             *
             * Parametre olarak alınan değişkenlerin tanımı
             * byteDizi: Bu değişken ile byte dizisi olarak çözümlenmiş resim dosyalarınızı küçültebilirsiniz.
             * stream: Bu değişken ile HttpPostedFileBase kullanarak aldığınız resimlerinizin inputStream özelliğini göndererek boyutunu küçültebilirsiniz.
             * dizin: Bu değişken ise resminizin kaydedileceği klasör yolunu tutuyor.
             * 
             * Not: byteDizi veya stream değişkenlerinden birinin gönderilmesi yeterlidir diğeri null döndürülebilir.
             * 
             *******************/

            if (byteDizi != null || stream != null) //değişkenlerden en az birisinin dolu olduğunu kontrol ediyoruz.
            {
                try //try ile olası bir hata durumunda fonksiyonun patlaması yerine bir hata döndürmesini sağlıyoruz.
                {
                    WebImage resim = byteDizi == null ? new WebImage(stream) : new WebImage(byteDizi); // Bu alanda parametre olarak aldığımız değişkenlerden dolu olanı bir WebImage haline getiriyoruz.
                    
                    if (resim.Width > 1000) //Ben resimlerimin boyutunu 1000px ile sınırlandırdım. Siz dilediğiniz çözünürlüğü verebilirsiniz. Burada width değerini kontrol ediyoruz.
                        resim = resim.Resize(1000, 1000, preserveAspectRatio: true);
                    else
                        if (resim.Height > 1000)//Width değeri 1000den küçükse height değerini kontrol ediyoruz. Eğer iki koşul da sağlanmazsa zaten küçük bir resim olduğu için bir işlem yapmıyorum.
                        resim = resim.Resize(1000, 1000, preserveAspectRatio: true);

                    string resimAdi = DateTime.UtcNow.AddHours(3).ToString("yyyyMMddHHmmss")+"."+resim.ImageFormat; //Kaydedilecek resim için anlık tarihi bir resim adı olarak kaydediyorum.
                    
                    if (!Directory.Exists(Server.MapPath(dizin))) // Dizinin var olup olmadığını kontrol ediyorum.
                    {
                        Directory.CreateDirectory(Server.MapPath(dizin)); //Dizin yoksa oluşturuyorum.
                    }

                    resim.Save(Server.MapPath(dizin + resimAdi), resim.ImageFormat, false); // Ve resim dosyamızı kaydediyoruz.
                    return dizin + resimAdi; // resim yolumuzu döndürüyoruz.
                }
                catch (Exception hata)
                {
                    //Catch kısmı tamamen özelleştirilebilir hata durumunda ne yapmasını dilerseniz o şekilde bir uyarı döndürebilirsiniz.
                    mail.MailGonder("yavuz@yavuzceliker.com.tr", "Resim Yükleme Hatası", hata.ToString());
                    return "hata";
                }

            }
            else
                return "hata";

        }