Orantılı resim küçültme

Orantılı resim küçültme

Sitemize resim yada fotoğraf ekleyeceğimiz zaman boyutlarıyla oynamak isteriz. İçerisine ilan girilen bir sitemiz olduğunu varsayalım. Bu durumda kullanıcılar cep telefonu ve fotoğraf makinelerinden çektikleri fotoğrafları olduğu gibi siteye yüklemek isteyecektir. Bu fotoğrafları orjinal halleriyle sitemize yüklememizin intihardan farkı yok. Dolayısıyla bunların boyutlarını ve ölçeklerini küçültüp sitemize uygun hale getirmemiz gerekiyor. Tam da sorunun başladığı kısım burası. İstediğimiz gibi bir paket bulmak oldukça zor. Örneğin;  ImageResizer paketi en bilinen resim ölçekleme araçlarından biri fakat dezavantajı resimi kırparak (crop) küçültmesi buda resimin sağ ve sol yanlarının kesilmesi demek. Diyelim ilan veren bir araba fotoğrafı koydu. ImageResizer aracın bagaj ve kaporta kısmını keserek ekliyor. Kullanıcının tepkisini düşünün. Kısacası iş başa düşüyor ve biraz kod yazarak bu işin üstesinden geleceğiz.

Resmi orantılı küçülten kodlar : 

public static string Kaydet(HttpPostedFile atilacakDosya, string yol, string fileGroup)
{

HttpPostedFile postedFile = atilacakDosya; // Yüklenecek resim seçildi

System.Drawing.Image bm = System.Drawing.Image.FromStream(postedFile.InputStream);

Bitmap sourceImage = new Bitmap(bm); //  Seçilen dosyayı ölçeklendirmek için bitmap içerisinde atıyoruz

int maxImageWidth = 480; // Resmin belirlediğimiz yada olmasını istediğimiz uzunluğu
int maxImageHeight = 360; // Resmin belirlediğimiz yada olmasını istediğimiz büyüklüğü

if (sourceImage.Width > sourceImage.Height) // Seçilen resmin uzunluğu yüksekliğinden fazlaysa
{
int newImageHeight = (int)(sourceImage.Height * ((float)maxImageWidth / (float)sourceImage.Width)); // Optimum yüksekliği elde ediyoruz
Bitmap resizedImage = new Bitmap(maxImageWidth, newImageHeight); // Yeni boyutlarımızı bitmap içine atıyoruz

double y = (double)((float)maxImageHeight – (float)newImageHeight / 3.5; // Resim maxImageWidth yüksekliğinden küçükse ortala

Graphics gr = Graphics.FromImage(resizedImage); // Resmin alanında değişiklik yapmak ve resmi düzgün göstermek için Graphics kütüphanemizden faydalnıyoruz
gr.Clear(Color.White); // Arka plan rengi beyaz oluyor
gr.InterpolationMode = InterpolationMode.HighQualityBicubic; // Resimleri yüksek kalitede dönüştürüyoruz
gr.DrawImage(sourceImage, 0, Convert.ToInt32(y), maxImageWidth, newImageHeight); // Görüntüleme parametrelerini giriyoruz
// Save the resized image:
resizedImage.Save(yeniPath, System.Drawing.Imaging.ImageFormat.Jpeg); // ve jpg uzantısında kaydediyoruz.
}
else if (sourceImage.Height > sourceImage.Width) // Seçilen resmin  yüksekliği uzunluğundan fazlaysa yukarıdaki kodları tam tersine çeviriyoruz.
{
int newImageWidth = (int)(sourceImage.Width * ((float)maxImageHeight / (float)sourceImage.Height));
Bitmap resizedImage = (new Bitmap(maxImageWidth, newImageWidth));
double x = (double)((float)maxImageWidth – (float)newImageWidth) / 3.5;
Graphics gr = Graphics.FromImage(resizedImage);
gr.Clear(Color.White);
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.DrawImage(sourceImage, Convert.ToInt32(x), 0, maxImageHeight, newImageWidth);
// Save the resized image:
resizedImage.Save(yeniPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}

Artık resimlerimiz düzgün bir biçimde ölçeklendirildi. Takıldığınız bir yer olursa yorumlara yazın. Gün içerisinde cevap vermeye çalışırım.

Kolay gelsin

Muavenet

Web teknolojilerine merak salmış bir bilgisayar mühendisinin yazıları

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir