Sayfalar

16 Ocak 2013 Çarşamba

C# resim boyutlandırma (Image Resizer)

Aşağıdaki kod verilen resmi istenilen büyüklükte yeniden boyutlandırır. Bilmeniz gereken bu fonksiyon resmi boyutlandırırken, uzun_kenar/kısa_kenar oranını korur.

public static class ImageManager
{
    //Namespace Reference
    /// <summary>
    /// resmi yeniden boyutlandıran metod
    /// </summary>
    /// <param name="imgToResize">boyutlandırılacak resim</param>
    /// <param name="size">boyutlar</param>
    /// <returns>Image titipnde bir resim</returns>
    public static Image ResizeImage(Image imgToResize, Size size)
    {
        int sourceWidth = imgToResize.Width;
        int sourceHeight = imgToResize.Height;

        float nPercent = 0;
        float nPercentW = 0;
        float nPercentH = 0;

        nPercentW = ((float)size.Width / (float)sourceWidth);
        nPercentH = ((float)size.Height / (float)sourceHeight);

        if (nPercentH < nPercentW)
            nPercent = nPercentH;
        else
            nPercent = nPercentW;

        int destWidth = (int)(sourceWidth * nPercent);
        int destHeight = (int)(sourceHeight * nPercent);

        Bitmap b = new Bitmap(destWidth, destHeight);
        Graphics g = Graphics.FromImage((Image)b);
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;

        g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
        g.Dispose();
        imgToResize.Dispose();

        return (Image)b;
    }
}
Sonuç olarak boyutlanmış olarak bir resim döndürür.

6 yorum:

  1. Merhaba,
    Burda zannedersem resim kalitesi ile ilgili bir ayar yok. Birde kaydettiği format kaynak dosya formatıyla aynımı?

    Ayrıca gördüğüm kadarıyla madem genişliğe göre yüksekliği kendi orantılı yapıyor. O zaman yukardaki bazı satırla fuzuli.

    nPercentH = ((float)size.Height / (float)sourceHeight);

    if (nPercentH < nPercentW)
    nPercent = nPercentH;

    bu satırlara gerek yok

    YanıtlaSil
    Yanıtlar
    1. Soru: resim kalitesi ile ilgili bir ayar yok ?
      Cevap: Orjinali ile arasındaki fark göz ile anlaşılmayacak kalitede ceviriyor.

      Soru: kaydettiği format kaynak dosya formatıyla aynımı?
      Cevap: Evet.

      Soru : madem genişliğe göre yüksekliği kendi orantılı yapıyor. O zaman yukardaki bazı satırla fuzuli.
      Cevap: Hayır fuzuli değil. Genişlik/Yükseklik oranında 1 den büyükse farklı, küçükse farklı boyutlandırma var. Örneğin; 400x300 bir resimin, 200x200 olarak boyutlandırmak isterseniz, resimin yeni boyutu, 200x150 olur. Resmin boyutu eğer 300x600 ve siz bunu yine 200x200 ile boyutlandırmak isterseniz, resmin boyutlanmış hali 100x200 olur. Yani sadece genişlik değil, yüksekliklede hesağlanıyor. Genişliği 200 yaptıgınızda, yukseklik 200 den buyuk olacaksa bu boyutlandırma genişlige gore degil, yukseklige gore yapılır. Oradaki kosul bu oran için konulmuştur.

      Sil
  2. visual studio 2013 ile web site configuration kullanımı hakkında sitenizde bir paylaşımda bulunabilirmisiniz çünkü visual studio 2013 de heralde degişmiş veya bu hakkkında bilgi veren başka bir site var ise bilgilendirebilirseniz memnun olurum lütfen...

    YanıtlaSil
    Yanıtlar
    1. Değişiklik yok diye biliyorum. Ne değişmiş?

      Sil
  3. Bu kodları nasıl asp.net mvc projemizde kullanabiliriz ? Bu konuda bir makale yazarsanız çok faydalı olur.

    YanıtlaSil
  4. Çok aramıştım. Sayenizde mükemmel sonuç aldım. Çok teşekkürler...

    YanıtlaSil