En iyi yanıtlayıcılar
Resmi klasöre kaydetmeden boyutunu küçültüp kayded?

Soru
-
Merhaba arkadaşlar.
Projemde resimleri upload ederken bir klasöre kaydediyorum sonra ordan o resmi alıp boyutunu küçültüp tekrar kaydediyorum.Kodu örnek ile aşşağıda yazıcam.belki bazı arkadaşlarımızın işine yarar fakat benim yapmak istediğim şey, Resmi klasöre kaydetmeden bir yerde tutup onun boyutunu küçültüp kaydetmek.Bu mumkunmu acaba?
Kodum şu şekilde.
for (int i = 0; i < SecilenDosyalar.Count; i++)
{
string path = System.Configuration.ConfigurationManager.AppSettings["Paylasimlar"].ToString();
string NewName = Guid.NewGuid().ToString();
string NewImageUzanti = NewName + uzanti;
string boyutlandirma = System.Configuration.ConfigurationManager.AppSettings["boyutlandirma"].ToString();
fldResimUpload.PostedFiles.SaveAs(Server.MapPath(boyutlandirma) + "/" + NewName + uzanti);
int sabit = 500; // Küçültülecek Genişlik Değeri belirtiyoruz.
Bitmap bmp = new Bitmap(Server.MapPath((boyutlandirma) +"/"+ NewName + uzanti));
using (Bitmap OriginalBM = bmp)
{
double ResimYukseklik = OriginalBM.Height;
double ResimUzunluk = OriginalBM.Width;
double oran = 0;
if (ResimUzunluk > ResimYukseklik && ResimUzunluk > sabit) //Eğer resmin genişliği yüksekliginden büyükse veya 150 pxden büyükse
{
oran = ResimUzunluk / ResimYukseklik;
ResimUzunluk = sabit; //Resmin genişliğini 150 olarak atayacak ve aşağıda o genişliğe göre yüksekliği bulacak.
ResimYukseklik = sabit / oran;
}
else if (ResimYukseklik > ResimUzunluk && ResimYukseklik > sabit) //Buradada yukarıdaki işlemin tersini yapıp genişliği otomatik bulacak.
{
oran = ResimYukseklik / ResimUzunluk;
ResimYukseklik = sabit;
ResimUzunluk = sabit / oran;
}
Size newSize = new Size(Convert.ToInt32(ResimUzunluk), Convert.ToInt32(ResimYukseklik)); //Resmi yeniden boyutlandırıyoruz.
Bitmap Resizebm = new Bitmap(OriginalBM, newSize);
}
Burada çoklu resim upload kullandım. boyutlandır adında bir klasöre geçici olarak fotografı yazıyorum.Sonra buradan bu fotografın boyutunu küçültüp path adındaki klasöre tekrar yazıyorum.
Yanıtlar
-
MemoryStream ile bu işlemi yapabilirsin.
ThumbnailOlustur(fldResimUpload.FileBytes, _fileName, _savepath);
void ThumbnailOlustur(byte[] byteArray, string _filename, string _savepath)
{
using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(byteArray))
{
using (System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream))
{
Size newsize = new Size(150, 120);
using (System.Drawing.Image thumbnail = new Bitmap(newsize.Width, newsize.Height))
{
using (System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(thumbnail))
{
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.DrawImage(image, 0, 0, newsize.Width, newsize.Height);
ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
using (EncoderParameters encoderParameters = new EncoderParameters(1))
{
encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80L);
thumbnail.Save(string.Format("{0}{1}", _savepath, _filename), info[1], encoderParameters);
}
}
}
}
}
- Yanıt Olarak İşaretleyen Özgür Tekbaş 10 Ocak 2014 Cuma 11:13
Tüm Yanıtlar
-
MemoryStream ile bu işlemi yapabilirsin.
ThumbnailOlustur(fldResimUpload.FileBytes, _fileName, _savepath);
void ThumbnailOlustur(byte[] byteArray, string _filename, string _savepath)
{
using (System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(byteArray))
{
using (System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream))
{
Size newsize = new Size(150, 120);
using (System.Drawing.Image thumbnail = new Bitmap(newsize.Width, newsize.Height))
{
using (System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(thumbnail))
{
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.DrawImage(image, 0, 0, newsize.Width, newsize.Height);
ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
using (EncoderParameters encoderParameters = new EncoderParameters(1))
{
encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 80L);
thumbnail.Save(string.Format("{0}{1}", _savepath, _filename), info[1], encoderParameters);
}
}
}
}
}
- Yanıt Olarak İşaretleyen Özgür Tekbaş 10 Ocak 2014 Cuma 11:13
-
Merhabalar.Verdiğiniz örnek için teşekkürler.Örneği kendime göre duzenledim fakat tam bu kısımda aşşağıdaki hatayı alıyorum.Klasörün yetkisi olmayabilir diye düşündüm yetki verdim (okuma yazma vs..) birşey değişmedi..
thumbnail.Save(string.Format("{0}{1}", _savepath, _filename), info[1], encoderParameters);
GDI+ içinde genel bir hata oluştu.