У меня есть приложение MVC, где вы можете загрузить изображение, и оно будет изменено до макс. 50KB. Я делаю изменение размера в цикле while, но проблема в том, что я уменьшаю ширину и высоту изображения, размер файла увеличивается. В определенный момент размер становится меньше, но за счет качестваC# - Уменьшить разрешение изображения увеличить размер файла
Request.InputStream.Position = 0;
string Data = new System.IO.StreamReader(Request.InputStream).ReadToEnd();
var Base64 = Data.Split(',')[1];
var BitmapBytes = Convert.FromBase64String(Base64);
var Bmp = new Bitmap(new MemoryStream(BitmapBytes));
while (BitmapBytes.Length > 51200)
{
int Schritte = 20; //I tested here also with 300
int maxWidth = Bmp.Width;
maxWidth = maxWidth - Schritte;
int maxHeight = Bmp.Height;
maxHeight = maxHeight - Schritte;
Bmp = ScaleImage(Bmp, maxWidth, maxHeight);
var base64 = ReturnImageAsBase64(Bmp);
BitmapBytes = Convert.FromBase64String(base64);
}
Кодекс, чтобы изменить размер:
public static Bitmap ScaleImage(Image image, int maxWidth, int maxHeight)
{
var ratioX = (double)maxWidth/image.Width;
var ratioY = (double)maxHeight/image.Height;
var ratio = Math.Min(ratioX, ratioY);
var newWidth = (int)(image.Width * ratio);
var newHeight = (int)(image.Height * ratio);
Bitmap newImage = new Bitmap(newWidth, newHeight);
using (Graphics gr = Graphics.FromImage(newImage))
{
gr.SmoothingMode = SmoothingMode.HighQuality;
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
gr.DrawImage(image, new Rectangle(0, 0, newWidth, newHeight));
}
return newImage;
}
Я начинаю с Размер 66964 байт. После первого поворота в петле его 85151 байт и это, хотя ширина была уменьшена на 300 пикселей и высотой 420 пикселов.
Я бы сказал, что это проблема вашего PixelFormat. Если у вас есть, например, растровое изображение с 1bpp (черным или белым) и нарисуйте его на свой newImage в ScaleImage, newImage создается с помощью Pixelformat по умолчанию, который, скорее всего, будет с цветами, поэтому вы получите 24bpp, что приведет к значительному увеличению размера памяти , –