19 Mart 2009 Perşembe

Resim Boyutlandırma ASP.NET

public void BoyutlandirVeKaydet(Stream strResim, int istenenGenislik, int istenenYukseklik)
{
//Öncelikle FileUpload1.FileContent ile oluşturulmuş Stream'den resim oluşturulur.
System.Drawing.Image asilResim = System.Drawing.Image.FromStream(strResim);

//"Keep aspect ratio" yapılarak yani oranlar korunarak yeni boyutlar hesaplanır.
if (asilResim.Width <= istenenGenislik) { istenenGenislik = Convert.ToInt32(asilResim.Width); } int yeniYukseklik = Convert.ToInt32(asilResim.Height * istenenGenislik / asilResim.Width); if (yeniYukseklik > istenenYukseklik)
{
yeniYukseklik = istenenYukseklik;
istenenGenislik = Convert.ToInt32(asilResim.Width * istenenYukseklik / asilResim.Height);
}

//Yeni boyutlarda bir Bitmap oluşturulur ve bu Bitmap'dan Graphics türetilir.
Bitmap bmp = new Bitmap(istenenGenislik, yeniYukseklik);
Graphics gr = Graphics.FromImage(bmp);
gr.SmoothingMode = SmoothingMode.HighQuality;
gr.CompositingQuality = CompositingQuality.HighQuality;
gr.InterpolationMode = InterpolationMode.High;

//Asıl resim, oluşturulan Rectangle ile Bitmap üzerine çizdirilir.
Rectangle rect = new Rectangle(0, 0, istenenGenislik, yeniYukseklik);
gr.DrawImage(asilResim, rect, 0, 0, asilResim.Width, asilResim.Height, GraphicsUnit.Pixel);

//Yeni resim benzersiz bir isim ile kaydedilir.
string resimAdi = Guid.NewGuid().ToString();
string resimUrl = Server.MapPath("~/Albumler/") + resimAdi + ".albumResmi";
bmp.Save(resimUrl);
bmp.Dispose();
asilResim.Dispose();
}

GetThumbnailImage
metodu yerine bu yolu seçmemdeki sebep; metodun adından da anlaşılacağı gibi Thumbnail üretmesidir. Bu da en iyi 120 x 120 piksel boyutlarında olmaktadır. Daha yüksek çözünürlüklerde oluşabilecek kayıplara karşı DrawImage metodu tercih edilmedilir.

Hiç yorum yok:

Yorum Gönder