Мои исходные изображения 2288px x 1712px и 816kb. Когда я создаю эскиз 1024 x 768, размер файла более чем в два раза превышает источник с высоким разрешением (1.13mb - 1.8mb в зависимости от используемого метода).Создание миниатюр разумного размера для веб-приложения
Исходные изображения и миниатюры, созданные: .jpg
Даже создавая 299 х 224 миниатюра 180KB, где, как если бы я вручную создать миниатюру в GIMP это 14kb.
Мне нужно, чтобы изображения выглядели хорошо, поэтому не могут идти на компромисс по качеству для размера.
Я пробовал Image.GetThumbnailImage, который создал файл 1.13mb, но я читал, что он может создавать неожиданные результаты.
Большинство статей говорит, чтобы написать код, как эта статья: http://www.codeproject.com/KB/GDI-plus/imageresize.aspx
Это дает мне эскиз 1.83MB.
Должен ли я ожидать больших размеров файлов по сравнению с тем же самым действием с настольным приложением?
Я пробовал 16 бит вместо 24 и комментировал значения «высокого качества», но я все еще не могу получить его под 1 МБ. Есть идеи?
Bitmap bmPhoto = new Bitmap(destWidth, destHeight,PixelFormat.Format24bppRgb);
bmPhoto.SetResolution(image.HorizontalResolution,image.VerticalResolution);
Graphics grPhoto = Graphics.FromImage(bmPhoto);
grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;
grPhoto.SmoothingMode = SmoothingMode.HighQuality;
grPhoto.PixelOffsetMode = PixelOffsetMode.HighQuality;
grPhoto.CompositingQuality = CompositingQuality.HighQuality;
EDIT ДЛЯ ОТВЕТА
мне не хватало компрессию. Мой 1024 эскиза теперь 112kb.
Encoder qualityEncoder = Encoder.Quality;
//80L is the compression percentage
EncoderParameter ratio = new EncoderParameter(qualityEncoder, 80L);
// Add the quality parameter to the list
EncoderParameters codecParams = new EncoderParameters(1);
codecParams.Param[0] = ratio;
ImageCodecInfo jpegCodecInfo = GetEncoderInfo("image/jpeg");
bmPhoto.Save(Path.Combine(filepath, RenameImage(filename, appendName, replaceWholeString)), jpegCodecInfo, codecParams);
ImageCodecInfo GetEncoderInfo(string mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for(j = 0; j < encoders.Length; ++j)
{
if(encoders[j].MimeType.ToUpper() == mimeType.ToUpper())
return encoders[j];
}
return null;
}
В каком формате вы сохраняете свои миниатюры? – VBNight
Добавлен к вопросу - источник и миниатюры .jpg – KevinUK
Также добавьте код, в котором вы сохраняете JPG. Код изменения размера выглядит правильно. – VBNight