Я видел тонну статей о переполнении стека для уменьшения размера изображения, но ни одна из них не поддерживает исходный тип изображения (или я так нашел). У них обычно есть шаги по уменьшению размеров в пикселях, снижению качества изображения и преобразованию в определенный тип изображения c (обычно в JPEG).
У меня есть группа изображений, размер которых мне нужно изменить. Они имеют различные типы изображений, и все имена файлов хранятся в базе данных, что делает преобразование из одного типа изображения в другой несколько проблематичным c. Я не могу просто изменить имя файла с png на jpg, потому что тогда база данных не будет указывать на реальный файл.
У кого-нибудь есть пример того, как изменить размер / уменьшить изображения до «256 килобайт» и сохранить исходный тип изображения?
Например, вот код, с которым я в данный момент работаю.
public static byte[] ResizeImageFile(Image oldImage, int targetSize) // Set targetSize to 1024
{
Size newSize = CalculateDimensions(oldImage.Size, targetSize);
using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb))
{
using (Graphics canvas = Graphics.FromImage(newImage))
{
canvas.SmoothingMode = SmoothingMode.AntiAlias;
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic;
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality;
canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize));
MemoryStream m = new MemoryStream();
newImage.Save(m, ImageFormat.Jpeg);
return m.GetBuffer();
}
}
}
Может быть, есть способ, которым я могу сначала получить файл fileinfo или mime type, а затем включить. Сохранить тип изображения?