5 Aralık 2011 Pazartesi

AsyncFileUpload ve FileUpload - Resim Boyutlandırma

   Sunucuya bir resim yüklediğimizde bu resmi bazen küçültmek veya boyutlandırmak isteyebiliriz. Bu konuda pek çok farklı yöntem bulunmaktadır. Bu yöntemlerden birini bugün burada anlatmaya çalışacağım.


using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;


Yukarıdaki namespace alanlarını sayfanızın en üstüne yapıştırınız. Bitmap veya FileInfo gibi sınıflar bu namespace alanları içerinde tanımlanmıştır.


protected void AsyncFileUploadIlan_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
  { 


 AsyncFileUploadIlan.SaveAs(Server.MapPath("~/Resimler/" + AsyncFileUploadIlan.FileName));   // dosyayı geçici olarak ilgili klasöre kaydediyoruz
                    ResimBoyutlandir();         // metodumuzu çağırıyoruz

}






 private void ResimBoyutlandir()
 {
            using (Bitmap OriginalBM = new Bitmap(Server.MapPath("~/Resimler/" + AsyncFileUploadIlan.FileName)))   // geçici olarak kaydettiğimiz resmi getiriyoruz
            {
                Size newSize = new Size(300,300);   // resmin boyutunu ayarlıyorum
                Bitmap Resizebm = new Bitmap(OriginalBM, newSize);  // boyutlandırılmış Bitmap              
                                                                                                              // resmimi oluşturuyorum
                Resizebm.Save(Server.MapPath("~/Resimler/ilan/" +  AsyncFileUploadIlan.FileName));     //  resmi istediğim klasöre kaydediyorum
                OriginalBM.Dispose();
            }
            FileInfo fi = new FileInfo(Server.MapPath("~/Resimler/" + AsyncFileUploadIlan.FileName));   
            fi.Delete();   // geçici olarak kaydettiğim resmi siliyorum
}


   Yukarıdaki metodumuz kullanacağız. Bu metodu kullanmak istediğiniz sınıfın içerisine yapıştırınız. Burada klasör adlarını uygulamanıza göre değiştirmeniz gerekiyor. Ayrıca yazmak istediğiniz klasörlerde de yazma izninin verilmiş olması gerekiyor. Aksi takdirde hata ile karşılaşırsınız.

   Ben burada genişliği : 300 px ve yüksekliği : 300 px olan bir resim boyutu tanımladım. Siz bu boyutu istediğiniz gibi belirleyebilirsiniz. Burada önemli bir nokta var. Peki resmimizin boyutu bu değerlerden küçükse ne olacak ? Sorunun cevabı oldukça basit aslında. Elbette ki bu sefer tam tersi resmin boyutunu büyültecek. Eğer bunun olmasını istemiyorsanız, yani resminizin eni ve boyu belli bir değerden küçükse boyutlandırma yapmadan kaydetmek istiyorsanız yukarıdaki kodlarda biraz değişiklik yapmak gerekiyor:

protected void AsyncFileUploadIlan_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
  { 

 AsyncFileUploadIlan.SaveAs(Server.MapPath("~/Resimler/ilan/" + AsyncFileUploadIlan.FileName));   // dosyayı geçici olarak ilgili klasöre kaydediyoruz
                    ResimBoyutlandir();         // metodumuzu çağırıyoruz

}


  private void ResimBoyutlandir()
   {
  using (Bitmap OriginalBM = new Bitmap(Server.MapPath("~/Resimler/" + AsyncFileUploadIlan.FileName)))
            {
                if (OriginalBM.Width > 300 || OriginalBM.Height > 300)
                {
                    Size newSize = new Size(300, 300);
                    Bitmap Resizebm = new Bitmap(OriginalBM, newSize);


              Resizebm.Save(Server.MapPath("~/Resimler/ilan/" + AsyncFileUploadIlan.FileName));
                    OriginalBM.Dispose();
                }
            }            
 }



Dikkat : Dosyamızı geçici olarak kaydettiğimiz klasör ile kalıcı olarak kaydettiğimiz klasör farklı olmalı yoksa hata mesajı ile karşılaşırsınız.


İLGİLİ BAĞLANTILAR: