Kullanıcıların Web uygulamalarında sunucuya yüksek çözünürlükte resim upload etmesi bazen sıkıntı yaratabiliryor. Yada kullanıcıdan sabit bir boyutta resim istediğinizde bu işlemi kullanıcıya bırakmak işininiz zora sokuyor olabilir. Bu sorunun çözümü için sunucuya upload edilen resmi istediğiniz boyutta kaydedip saklayabilmek için bir class oluşturalım. Böylece hem bu işlemi kullanıcıya bırkmamış olur ve hemde yüksek çözünürlükteki resimleri sayfamızda gösterirken kaybettiğimiz zamanı kazanmış oluruz.
Örneğin kullanıcının upload ettiği resmi hem anasayfanızda thumbnail (küçük resim) maximum 80x80 boyutunda hemde üzerine tıklandığında maximum 800x800 boyutunda göstermek istiyorsunuz. Bu işlem için aynı resmin 2 kopyasını sunucumuzda tutarak sayfa yükleme hızını arttırabilirsiniz.
Thumbnail için 80x80
Büyük Resim için 800x800 gibi
İşte bu işlemi yapmak için aşağıdaki classı kullanabilirsiniz. ResimOlustur methoduna resmin adresini ve istediğiniz maximin en yada boy değerini vererek resmi oluşturabilirsiniz.
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
namespace ResimIslem
{
public class ResimIslem
{
///<summary>
/// Fiziksel adresi gonderilen resmi oranını değiştirmeden yeniden boyutlandırır.
///</summary>
///<param name="MaxBoy">Yükseklik yada Genişlik için istediğiniz maximum pixel değeri</param>
///<param name="orjResim">Orjinal resmin fiziksel adresi</param>
///<returns></returns>
public Image ResimOlustur(int MaxBoy, string orjResim)
{
int boy, yuk;
Image resim = Image.FromFile(orjResim);
Size boyut = resim.Size;
if (MaxBoy >= boyut.Height && MaxBoy >= boyut.Width)
return null;
double oran = (double)boyut.Width / boyut.Height;
if (boyut.Width >= boyut.Height)
{
boy = MaxBoy;
yuk = (int)(boy / oran);
}
else
{
yuk = MaxBoy;
boy = (int)(yuk * oran);
}
Image th = new Bitmap(boy, yuk, resim.PixelFormat);
Graphics g = Graphics.FromImage(th);
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
Rectangle dikdortgen = new Rectangle(0, 0, boy, yuk);
g.DrawImage(resim, dikdortgen);
resim.Dispose();
return th;
}
}
}
Test etmek için yeni bir ASP.NET Web Site uygulaması başlatalım. Eğer Class Library olarak oluşturduysanız class’ı Add Referance diyerek .dll dosyanızı projenize ekleyin daha sonra using satırını ekleyin. Eğer oluşturmadıysanız projenize yeni bir class ekleyin ve yukarıdaki kodu yazın.
Projenizin içerisen galeriler isminde yeni bir klasor oluşturun ve bu klasor içerisine orj,kresim ve resim isminde 3 tane daha klasor oluştur.
Resmi ilk upload ettiğimizde orjinal halini
orj klasorune kaydedeceğiz daha sonra küçük boyutunu
kresim ve istediğimiz büyük boyutta olanı iste
resim klasorune kaydedeceğiz.

Daha sonra uygulamanıza FileUpload,Button ve Label yerleştirin.
Gönder button’un click event’inde kodumuzu yazalım.

if (FileUpload1.HasFile)
{
ResimIslem yap = new ResimIslem();
string yol = Server.MapPath("~/galeriler/orj/" + FileUpload1.FileName);
string uzanti = FileUpload1.FileName.Substring(FileUpload1.FileName.LastIndexOf('.') + 1).ToLower();
if (File.Exists(Server.MapPath("~/galeriler/resim/") + FileUpload1.FileName))
{
lblhata.Text = "Bu isimde Resim Zaten Var!";
return;
}
lblhata.Text = "";
if (uzanti == "bmp" || uzanti == "jpeg" || uzanti == "jpg" || uzanti == "gif")
{
if (FileUpload1.FileBytes.Length < 3145728)
{
FileUpload1.SaveAs(yol);
System.Drawing.Image kucuk, buyuk;
kucuk = yap.ResimOlustur(100, yol);
buyuk = yap.ResimOlustur(500, yol);
kucuk.Save(Server.MapPath("~/galeriler/kresim/" + FileUpload1.FileName));
buyuk.Save(Server.MapPath("~/galeriler/resim/" + FileUpload1.FileName));
File.Delete(yol);
}
else
{
lblhata.Text = "Yüklemek istediğiniz resim çok büyük";
}
}
else
{
lblhata.Text = "Lütfen Resim bmp,jpeg,jpg yada gif uzantılı dosya seçin!";
}
}
else
lblhata.Text = "Lütfen Resim Seçin";
Uygulamanızı çalıştırın ve yüksek çözünürlükte 500x500 den büyük bir resim upload edin. İşlem bittikten sonra kresim klasorunda eni yada boyu max 100 olan bir resim, resim klasorunda ise eni yada boyu max 500 olan resim göreceksiniz. Ve orj klasorunun içinin boş olduğunu göreceksiniz. Böylece gereksiz yüksek çözünürlük sıkıntısından kurtulmuş olduk.