none
Resmi klasöre kaydetmeden boyutunu küçültüp kayded? RRS feed

  • 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.
    4 Ocak 2014 Cumartesi 21:30

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

                            }
                        }
                    }
                }
            }

        
    4 Ocak 2014 Cumartesi 22:39

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

                            }
                        }
                    }
                }
            }

        
    4 Ocak 2014 Cumartesi 22:39
  • 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.

    12 Ocak 2014 Pazar 15:42