Bu kodaman.org’daki ilk yazım. Merhaba;Bu yazımda ASP.NET ile transparan png dosyalarından thumbnail resimleri oluşturmayı anlatacağım. Bir proje üzerinde çalışırken 600-700 resmi kataloğa göre boyutlandırmam gerekiyordu ve bunları teker teker yapana kadar bunu ASP.NET ile nasıl yaparım diye düşündüm ve araştırdım. İnternette bulduğum çoğu makalede Image sınıfının GetThumbnailImage metodunu kullanarak yapıyordu. Ve bu metot resminizin kalitesini düşürdüğü gibi transparan PNG resmimizin kenarlarınada siyah veya gri kenarlıklar veriyordu. Eğer yüksek kaliteli resimlerle çalışıyorsanız GetThumbnailImage metodunu kullanmamanızı tavsiye ederim. Benim yazdığım bu kodda resmi verilen yüksekliğe göre oranlıyoruz. Şimdi bir aspx sayfası oluşturarak code-behind aşağıdaki namespace’leri import ediyoruz :using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;
Daha sonra aşağıdaki kodları Page_Load event’ine yazıyoruz ://QueryString üzerinden resim yolunu alıyoruz.string filename = Request.QueryString[“resim_yolu”].ToString();System.Drawing.Image orig_image = System.Drawing.Image.FromFile(Server.MapPath(filename));//Gelen resmin boyutlarını ve formatını alıyoruz.int orig_width = orig_image.Width;int orig_height = orig_image.Height;ImageFormat format = orig_image.RawFormat;//QueryString üzerinden gelen height değerini alıyoruz.int new_width = 0;int new_height = Convert.ToInt32(Request.QueryString[“height”].ToString());//Yüksekliğe göre genişliğini oranlıyoruz.new_width = orig_width * new_height / orig_height;//Boş bir bitmap oluşturarak işlemleri bu boş bitmap üzerinde gerçekleştiriyoruz.System.Drawing.Image white_back = new Bitmap(new_width, new_height, orig_image.PixelFormat);Graphics obj_graph = System.Drawing.Graphics.FromImage(white_back);//Arkaplan rengi transparent olan bir rectangle çiziyoruz.obj_graph.FillRectangle(new SolidBrush(Color.Transparent), 0, 0, new_width, new_height);//Burada bitmap’in kalite değerlerini ayarlıyoruz.obj_graph.InterpolationMode = InterpolationMode.HighQualityBicubic;obj_graph.PixelOffsetMode = PixelOffsetMode.HighQuality;obj_graph.SmoothingMode = SmoothingMode.AntiAlias;obj_graph.CompositingQuality = CompositingQuality.HighQuality;obj_graph.DrawImage(orig_image, 0, 0, new_width, new_height);orig_image = white_back;//Sayfanın formatını aspx yerine png olarak değiştiriyoruz.Response.Clear();Response.ContentType = “image/png”;System.IO.MemoryStream memory = new System.IO.MemoryStream();//ASP.NET direkt Response.OutputStream yazıldığı zaman hata verdiğininden geçici bir süreliğine veriyi bellekte tutmak//amacıyla MemoryStream sınıfından yararlanıyoruz.orig_image.Save(memory, format);memory.WriteTo(Response.OutputStream);orig_image.Dispose();memory.Close();Response.End();
Artık geriye sayfamızı çağırmak kaldı.

http://arsiv.pilli.com/Resim.aspx?height=100&resim_yolu=test.png

şeklinde sayfamızı çağırdığımız zaman verilen yüksekliğe göre resmimizin dinamik olarak boyutlandırıldığını görebiliriz.HTML içinde img tagiyle aşağıdaki şekilde kullanabiliriz :Yazdığım bütün kodları burada bulabilirsiniz.