Сегодня расскажу о схеме работы с картинками, которая используется сейчас у меня на работе.
Картинки хранятся в базе в максимальном разрешении. Для вывода на сайте картинка в зависимости от страницы или блока сжимается до нужного в пикселях размера. Размер пикселей передается в параметрах запроса. На итоговое изображение накладывается watermark, затем картинка кешируется и при повторном обращении уже берется из кеша. В момент отправки клиенту картинке присваивается уникальный Etag и параметры кеширования в браузере. То есть при повторном обращении браузер уже не запрашивает картинку, а берет из дискового кеша.
Недавно мы столкнулись с такой проблемой: при изменении gif картинки, качество ее заметно ухудшалось и те решения, которые успешно работали c jpeg, с gif картинками не давали результатов.
Решение оказалось достаточно простым. После изменения размера для gif картинок нужно устанавливать:
ImageFormat format = ImageFormat.Png;
context.Response.ContentType = "image/png";
В этом случае сглаживание картинки будет приемлемым для использования на сайте. В остальных случаях ImageFormat должен соответствовать исходному изображению.
P.S. Метод, успешно работающий для изменения размера, а также сглаживания jpeg картинок:
Картинки хранятся в базе в максимальном разрешении. Для вывода на сайте картинка в зависимости от страницы или блока сжимается до нужного в пикселях размера. Размер пикселей передается в параметрах запроса. На итоговое изображение накладывается watermark, затем картинка кешируется и при повторном обращении уже берется из кеша. В момент отправки клиенту картинке присваивается уникальный Etag и параметры кеширования в браузере. То есть при повторном обращении браузер уже не запрашивает картинку, а берет из дискового кеша.
Недавно мы столкнулись с такой проблемой: при изменении gif картинки, качество ее заметно ухудшалось и те решения, которые успешно работали c jpeg, с gif картинками не давали результатов.
Решение оказалось достаточно простым. После изменения размера для gif картинок нужно устанавливать:
ImageFormat format = ImageFormat.Png;
context.Response.ContentType = "image/png";
В этом случае сглаживание картинки будет приемлемым для использования на сайте. В остальных случаях ImageFormat должен соответствовать исходному изображению.
P.S. Метод, успешно работающий для изменения размера, а также сглаживания jpeg картинок:
Bitmap bp = new Bitmap(newSize.Width, newSize.Height);
using (Graphics g = Graphics.FromImage(bp))
{
//Сглаживание и интерполяция
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
//Изменение размера
Rectangle rect = new Rectangle(0, 0, thumbSize.Width, thumbSize.Height);
g.DrawImage(image, rect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
}
Выручил.
ОтветитьУдалитьЭтот комментарий был удален администратором блога.
ОтветитьУдалитьА что за объект у вас thumbSize?
ОтветитьУдалитьа если нужно сохранить картинку?
ОтветитьУдалитьи показывается ли это во всех браузерах?
bm.Save(пусть+расширение);
Удалить