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); } }