У меня есть функция, которая принимает байтовый массив данных изображения, а затем изменяет его размер таким образом, чтобы его высота или ширина не превышали 200 пикселей.
Функция успешно уменьшает размер изображения (в терминахразмеры), но размер файла резко увеличивается.
Пример. Изменилось изображение, изначально размером 32,2 КБ, с размерами 828x251.В результате получается изображение размером 374 КБ с размерами 577x200.
Ниже приводится используемая функция:
public static string resizeImage(string imgToResize)
{
try
{
string image_info = imgToResize.Split(',')[0];
MemoryStream ms = new MemoryStream(Convert.FromBase64String(imgToResize.Split(',')[1]));
System.Drawing.Image converted_image = System.Drawing.Image.FromStream(ms);
int original_width = converted_image.Width;
int original_height = converted_image.Height;
// Figure out the ratio
double ratioX = (double) original_width / (double) original_height;
double ratioY = (double) original_height / (double) original_width;
// use whichever multiplier is smaller
double ratio = ratioX < ratioY ? ratioX : ratioY;
int new_height = 0;// Convert.ToInt32(original_height * ratio);
int new_width = 0;// Convert.ToInt32(original_width * ratio);
// now we can get the new height and width
if (original_width <= original_height)
{
new_width = 200;
new_height = Convert.ToInt32((decimal)new_width / (decimal)ratio);
}
else {
new_width = Convert.ToInt32((decimal)original_width * (1-(decimal)ratio));
new_height = 200;
}
Size image_size = new Size(new_width, new_height);
System.Drawing.Image new_image = (System.Drawing.Image)(new Bitmap(converted_image, image_size));
using (MemoryStream m = new MemoryStream())
{
new_image.Save(m, ImageFormat.Bmp);
byte[] imageBytes = m.ToArray();
string base64String = Convert.ToBase64String(imageBytes);
return image_info + "," + base64String;
}
}
catch (Exception ex) {
ErrorSignal.FromCurrentContext().Raise(ex);
}
return "";
}
Может кто-нибудь объяснить, почему размер файла резко увеличивается из-за этого уменьшенияразмеры и как его предотвратить (или реально уменьшить размер файла в дополнение к уменьшению его размеров)?