public virtual string ResimUrlAl(int resimId,
                                         int hedefBüyüklüğü            = 0,
                                         bool varsayılanResimGöster    = true,
                                         string kaynakKonumu           = null,
                                         ResimTipi varsayılanResimTipi = ResimTipi.Varlık)
        {
            var resim = ResimAlId(resimId);

            return(ResimUrlAl(resim, hedefBüyüklüğü, varsayılanResimGöster, kaynakKonumu, varsayılanResimTipi));
        }
        public virtual string ResimUrlAl(Resim resim,
                                         int hedefBüyüklüğü            = 0,
                                         bool varsayılanResimGöster    = true,
                                         string kaynakKonumu           = null,
                                         ResimTipi varsayılanResimTipi = ResimTipi.Varlık)
        {
            string url = string.Empty;

            byte[] resimBinary = null;
            if (resim != null)
            {
                resimBinary = ResimBinaryYükle(resim);
            }
            if (resim == null || resimBinary == null || resimBinary.Length == 0)
            {
                if (varsayılanResimGöster)
                {
                    url = ResimVarsayılanUrlAl(hedefBüyüklüğü, varsayılanResimTipi, kaynakKonumu);
                }
                return(url);
            }

            if (resim.Yeni)
            {
                ResimThumbSil(resim);

                resim = ResimGüncelle(resim.Id,
                                      resimBinary,
                                      resim.MimeTipi,
                                      resim.SeoDosyaAdı,
                                      resim.AltÖznitelik,
                                      resim.BaşlıkÖznitelik,
                                      false,
                                      false);
            }

            var seoFileName = resim.SeoDosyaAdı;

            string sonParça = MimeTipindenDosyaUzantısınıAl(resim.MimeTipi);
            string thumbDosyaAdı;

            if (hedefBüyüklüğü == 0)
            {
                thumbDosyaAdı = !String.IsNullOrEmpty(seoFileName)
                    ? string.Format("{0}_{1}.{2}", resim.Id.ToString("0000000"), seoFileName, sonParça)
                    : string.Format("{0}.{1}", resim.Id.ToString("0000000"), sonParça);
            }
            else
            {
                thumbDosyaAdı = !String.IsNullOrEmpty(seoFileName)
                    ? string.Format("{0}_{1}_{2}.{3}", resim.Id.ToString("0000000"), seoFileName, hedefBüyüklüğü, sonParça)
                    : string.Format("{0}_{1}.{2}", resim.Id.ToString("0000000"), hedefBüyüklüğü, sonParça);
            }
            string thumbDosyaYolu = ThumbYoluAl(thumbDosyaAdı);

            // adı verilen mutex aynı dosyaların farklı iş parçacıklarında oluşturulmasını önlemeye yardımcı olur,
            // ve kod belirli bir dosya için engellendiği için performansı önemli ölçüde düşürmez.
            using (var mutex = new Mutex(false, thumbDosyaAdı))
            {
                if (!ThumbZatenMevcut(thumbDosyaYolu, thumbDosyaAdı))
                {
                    mutex.WaitOne();

                    //dosyanın zaten oluşturulduğunu kontrol eder
                    if (!ThumbZatenMevcut(thumbDosyaYolu, thumbDosyaAdı))
                    {
                        byte[] resimBinaryYenidenBoyutlandırıldı;

                        //yeniden boyutlandırma gerekli
                        if (hedefBüyüklüğü != 0)
                        {
                            using (var stream = new MemoryStream(resimBinary))
                            {
                                Bitmap b = null;
                                try
                                {
                                    b = new Bitmap(stream);
                                }
                                catch (ArgumentException exc)
                                {
                                    _logger.Hata(string.Format("Resim thumb oluşturulurken hata oluştu. ID={0}", resim.Id),
                                                 exc);
                                }

                                if (b == null)
                                {
                                    //bitmap bazı sebeplerden ötürü yüklenemedi
                                    return(url);
                                }

                                using (var destStream = new MemoryStream())
                                {
                                    var yeniBoyut = BoyutlarıHesapla(b.Size, hedefBüyüklüğü);
                                    ImageBuilder.Current.Build(b, destStream, new ResizeSettings
                                    {
                                        Width   = yeniBoyut.Width,
                                        Height  = yeniBoyut.Height,
                                        Scale   = ScaleMode.Both,
                                        Quality = _medyaAyarları.VarsayılanResimKalitesi
                                    });
                                    resimBinaryYenidenBoyutlandırıldı = destStream.ToArray();
                                    b.Dispose();
                                }
                            }
                        }
                        else
                        {
                            //resimBinary kopyasını oluştur
                            resimBinaryYenidenBoyutlandırıldı = resimBinary.ToArray();
                        }

                        ThumbKaydet(thumbDosyaYolu, thumbDosyaAdı, resim.MimeTipi, resimBinaryYenidenBoyutlandırıldı);
                    }

                    mutex.ReleaseMutex();
                }
            }
            url = ThumbUrlAl(thumbDosyaAdı, kaynakKonumu);
            return(url);
        }
        public virtual string ResimVarsayılanUrlAl(int hedefBüyüklüğü            = 0,
                                                   ResimTipi varsayılanResimTipi = ResimTipi.Varlık,
                                                   string siteKonumu             = null)
        {
            string varsayılanResimDosyaAdı;

            switch (varsayılanResimTipi)
            {
            case ResimTipi.Avatar:
                varsayılanResimDosyaAdı = _ayarlarServisi.AyarAlKey("Medya.Kullanıcı.VarsayılanAvatarResmi", "default-avatar.jpg");
                break;

            case ResimTipi.Varlık:
            default:
                varsayılanResimDosyaAdı = _ayarlarServisi.AyarAlKey("Medya.VarsayılanResim", "default-image.png");
                break;
            }
            string dosyaYolu = ResimLocalYolunuAl(varsayılanResimDosyaAdı);

            if (!File.Exists(dosyaYolu))
            {
                return("");
            }


            if (hedefBüyüklüğü == 0)
            {
                string url = (!String.IsNullOrEmpty(siteKonumu)
                                 ? siteKonumu
                                 : _webYardımcısı.SiteKonumuAl())
                             + "content/images/" + varsayılanResimDosyaAdı;
                return(url);
            }
            else
            {
                string dosyaUzantısı = Path.GetExtension(dosyaYolu);
                string thumbDosyaAdı = string.Format("{0}_{1}{2}",
                                                     Path.GetFileNameWithoutExtension(dosyaYolu),
                                                     hedefBüyüklüğü,
                                                     dosyaUzantısı);
                var thumbDosyaYolu = ThumbYoluAl(thumbDosyaAdı);
                if (!ThumbZatenMevcut(thumbDosyaYolu, thumbDosyaAdı))
                {
                    using (var b = new Bitmap(dosyaYolu))
                    {
                        using (var destStream = new MemoryStream())
                        {
                            var yeniBoyut = BoyutlarıHesapla(b.Size, hedefBüyüklüğü);
                            ImageBuilder.Current.Build(b, destStream, new ResizeSettings
                            {
                                Width   = yeniBoyut.Width,
                                Height  = yeniBoyut.Height,
                                Scale   = ScaleMode.Both,
                                Quality = _medyaAyarları.VarsayılanResimKalitesi
                            });
                            var destBinary = destStream.ToArray();
                            ThumbKaydet(thumbDosyaYolu, thumbDosyaAdı, "", destBinary);
                        }
                    }
                }
                var url = ThumbUrlAl(thumbDosyaAdı, siteKonumu);
                return(url);
            }
        }