Asp.Net ile fotoğrafları kaliteli boyutlandırma

Fotoğrafları direk boyutlandırdığımız zaman ciddi bir kalite kaybı meydana geliyor. CompositingQuality, InterpolationMode veya SmoothingMode değerleriyle oynasakda Photoshop’ un boyutlandırma kalitesine erişemiyoruz. Biraz araştırma yaptıktan sonra EncoderParameters ve ImageCodecInfo ile kalitenin ciddi bir şekilde arttırıldığını gördüm. Sonuç aşağıdaki görselde açık bir şekilde görülebiliyor. Özellikle üzerinde yazı bulunan görsellerde fark daha iyi farkediliyor. Aşağıda ki kodu kullanmak için fileupload nesnenizi methoda göndermeniz yeterli. Örneğin; fotograf.yukle(FileUpload1); Şunu da eklemek lazım, kaliteli ve kalitesiz fotoların aralarında neredeyse yarı yarıya boyut farkı bulunuyor.

Okumaya devam et Asp.Net ile fotoğrafları kaliteli boyutlandırma

ASP.NET ile Resim Boyutlandırma

Weble uğraşıpta resimlerle uğraşmayan kimse yokdur herhalde. Resmi upload et, sitenin tasarımında kullanılacak yerlere göre boyutlandır vs.. ASP.NET C# ile bu işlemi farklı bir methodla nasıl çözebilirizi anlatmaya çalışacağım. Bu mekanızmada sadece orjinal resmi upload ediyoruz ve görüntülemek istediğiniz yere göre boyutlandırıp çağırabiliyorsunuz. Bunu klasik ASP de PHP de yapmak da mümkün.

ResimBoyutlandir.aspx adında bir sayfa oluşturuyoruz ve ResimBoyutlandir.aspx.cs dosyamızın içine aşşağıdaki kodları yazıyoruz.

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

public partial class ResimBoyutlandir : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
resimboyutlandir();
}
}

protected void resimboyutlandir() {
int yeniW = Convert.ToInt16(Request.QueryString["Genislik"]); // küçülteceğimiz genişlik değerini alıyoruz.
string gelenResim = Request.QueryString["ResimAdi"]; //resim adını alıyoruz.
string Klasor = "Resimler/Urunler/" + gelenResim; // Resimlerin bulunduğu klasörü gösteriyoruz.
Image imgPhotoVert = Image.FromFile(Server.MapPath(Klasor));
Image imgPhoto = null;
imgPhoto = ResimBoyutlandir(imgPhotoVert, yeniW); //ScaleByPercent adlı mekanızmaya yolluyoruz aldığımız bilgileri.
imgPhoto.Save(Response.OutputStream, ImageFormat.Jpeg); // Ekrana basıyoruz..
imgPhoto.Dispose();
}

static Image ResimBoyutlandir(Image imgPhoto, int Yukseklik)
{
int sourceWidth = imgPhoto.Width;
int sourceHeight = imgPhoto.Height;

int destWidth = Yukseklik;
int destHeight = sourceHeight * Yukseklik / imgPhoto.Width; //resmin bozulmaması için en boy ayarını veriyoruz.

Bitmap bmPhoto = new Bitmap(destWidth, destHeight,PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(imgPhoto.HorizontalResolution,imgPhoto.VerticalResolution);

Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic; // resmin kalitesini ayarlıyoruz. Burada InterpolationMode özelliklerini bulabilirsiniz.
grPhoto.FillRectangle(Brushes.White, 0, 0, destWidth, destHeight);

grPhoto.DrawImage(imgPhoto,new Rectangle(0, 0, destWidth, destHeight),new Rectangle(0, 0, sourceWidth, sourceHeight),GraphicsUnit.Pixel);

grPhoto.Dispose();
return bmPhoto;
}
}

Şimdi geldik nasıl kullanacağımıza,
<img src=”ResimBoyutlandir.aspx?ResimAdi=boyutlanacakresim.jpg&Genislik=200″ /> Genişlik PX cinsindendir, bu kadar basit. Bu arada resim küçüldüğünde boyutuda küçülüyor. Yani yüklendiğinde 500KB olan 1000px çözünürlüğündeki bir resmi biz ekrana 100px olarak bastığımızda, örnek veriyorum boyutuda 10kb’ ye düşüyor.