Member 10371658 Ответов: 1

Как обрезать, сжать изображение в jquery, MVC без потери качества


я работаю над приложением mvc, в котором я загружаю изображение, сначала обрабатываю изображение, а затем загружаю изображение на сервер. когда я обрезаю изображение и передаю его в коде позади, размер изображения увеличивается в размере. пример. если я выберу изображение размером 50 КБ и загружу его, то его размер увеличится на 1 МБ до более чем 1 МБ.

Что я уже пробовал:

1)
public JsonResult UploadEventImage(string uploadedFile)
{
Bitmap bmp= null;

 

                byte[] byteBuffer = Convert.FromBase64String(uploadedFile.Replace("data:image/png;base64,", ""));

                MemoryStream memoryStream = new MemoryStream(byteBuffer);

 

                memoryStream.Position = 0;


                bmp= (Bitmap)Bitmap.FromStream(memoryStream);

                memoryStream.Close();

                memoryStream = null;

                byteBuffer = null;

 

                if (bmp!= null)

                {
                    string fileName = "image1.jpg";

                    fileName = "~/Content/img/" + fileName;
                    bmp.Save(Server.MapPath(fileName), System.Drawing.Imaging.ImageFormat.Bmp);

                    }

}

2)  public JsonResult UploadEventImage(string uploadedFile){ <pre>Bitmap bmp= null;

 

                byte[] byteBuffer = Convert.FromBase64String(uploadedFile.Replace("data:image/png;base64,", ""));

                MemoryStream memoryStream = new MemoryStream(byteBuffer);

 

                memoryStream.Position = 0;

 

                bmp= (Bitmap)Bitmap.FromStream(memoryStream);

 

 

                Image img = bmp;

                Bitmap resizedImg = new Bitmap(img.Width, img.Height);

 

                double ratioX = (double)resizedImg.Width / (double)img.Width;

                double ratioY = (double)resizedImg.Height / (double)img.Height;

                double ratio = ratioX < ratioY ? ratioX : ratioY;

 

                int newHeight = Convert.ToInt32(img.Height * ratio);

                int newWidth = Convert.ToInt32(img.Width * ratio);

 

                using (Graphics g = Graphics.FromImage(resizedImg))

                {

                    g.DrawImage(img, 0, 0, newWidth, newHeight);

                }
 if (bmp!= null)

                {

                    string fileName = "image1.jpg";

                    fileName = "~/Content/img/" + fileName;

                   

                    resizedImg.Save(Server.MapPath(fileName));
}
}

1 Ответов

Рейтинг:
1

OriginalGriff

Первое, что следует отметить, это то, что вы используете совершенно неправильный формат файла: JPG-это сжатие с потерями, и каждый раз, когда вы сохраняете файл в формате JPG, вы всегда будете терять качество. Сохраняйте слишком часто, и изображение станет неузнаваемым! Но маленький. Очень маленький.

Рассмотрите возможность использования BMP, GIF или PNG - BMP не сжимается, но GIF и PNG используют алгоритм сжатия без потерь.