C# İle Resim Kapasitesini Ayarlama
C# Image Nesnesinin Boyutunu Ayarlama ve Asp.NET FileUpload İle Seçilen Resmin Boyutunu Küçültme başlıklı yazılarımda C# ile bir resim boyutlarının nasıl ayarlandığına farklı yöntem ve açılardan değinmiştik.Biliyoruz ki, bir resmin boyutları ne kadar küçülürse, kapasiteside orantılı olarak küçülecek aksi halde aynı mantıkla büyüyecektir.Bu yazımızda bir resmin boyutlarını hiç değiştirmeden kapasitesini ayarlamayı inceleyeceğiz.
Elimde aşağıdaki gibi bir kapasite özelliklerine sahip resim bulunmaktadır.

Bu resmin boyutlarıyla oynayarak kapasitesini orantılı ayarlayabiliriz ancak bizim amacımız boyut ayarlarına dokunmadan kapasite ayarı çekmek.
O halde aşağıdaki gibi bir sınıf yazmamız gerekmektedir.
class KapasiteAyarlayici
{
private static ImageCodecInfo TipBilgisi(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
public static void KapasiteDusur(Image Resim)
{
Bitmap myBitmap;
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myBitmap = new Bitmap(Resim);
myImageCodecInfo = TipBilgisi("image/jpeg");
myEncoder = System.Drawing.Imaging.Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
// 1L - 100L arasında bir değer ile kapasite ayarını gerçekleştiriyoruz.
myEncoderParameter = new EncoderParameter(myEncoder, 1L);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save("Kayıt Edilecek Dizin", myImageCodecInfo, myEncoderParameters);
}
}
Yukarıdaki kod bloğunu incelerseniz eğer, hangi formattaki resimle çalışacaksak “TipBilgisi” isimli metodumuz o formatın Enum karşılığını getirmektedir.Daha sonra 1L – 100L arasında verilen bir değere göre resmin kapasitesi ayarlanmakta ve istenilen dizine kayıt işlemi gerçekleşmektedir.
Bu işleme tabi tutulan resmin kapasite boyutundaki değişikliği görmek için aşağıdaki resmi inceleyiniz.

Resmin ilk boyutuyla son boyutunu karşılaştırırsanız eğer bu algoritma sonucu ne kadar kapasite farkı olduğunu görebileceksiniz.Lakin bir kaç husustan bahsetmeninde faydası var.
Bu algoritma en performanslı olarak “.jpg”, “.jpeg” formatındaki resim dosyalarında çalışmaktadır.
Resim dosyasının kapasitesi değiştikçe boyut sabit kalacaktır lakin kapasiteye doğru orantılı olarak çözünürlükte artıp azalacaktır.
Bu durumları göz önüne alıp bu algoritmayı kullanmanızı tavsiye ederim.
İyi çalışmalar dilerim..

png ve diğer gormatlar için ne yapmamız gerekiyor ?
Hocam kayıt edilecek dizini hiçbir şekilde kabul etmiyor. Bende mi bir hata var acaba yardımcı olur musunuz
Ne hatası veriyor?
Hocam hata kullanımda olan resimle ilgili işlem yapapamdı yine sizin makalelerinizden çözdüm çok teşekkürler. Başka bir soru var hocam şimdi kullanıcı resmi yüklediği anda sunucuya kaydetmeden önce bu işlemden geçirip kaydetmek istiyorum. (Şuan ki yöntemim sunucaya önce kaydedip sonrada ordan alıp boyutunu küçültüyorum kaydediyorum ve öncekinde siliyorum:) sorunda buydu önceki kullanımda olduğu için üzerine işlem yapamıyodum )
Konuya dair pek yorum yapamıyorum. Araştırılması gerekiyor. Muhtemelen ilgili dosya in-memory’de tutulup operasyona tabii tutulabilir.
Neticede bulduğunuz çözümü burada bizimle de paylaşmanızı rica ediyorum.
İyi çalışmalar.