К основному контенту

Изменение размера картинок на c#. Проблемы с качеством итогового изображения.

Сегодня расскажу о схеме работы с картинками, которая используется сейчас у меня на работе.

Картинки хранятся в базе в максимальном разрешении. Для вывода на сайте картинка  в зависимости от страницы или блока сжимается до нужного в пикселях размера. Размер пикселей передается в параметрах запроса. На итоговое изображение накладывается 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);
}

Комментарии

Отправить комментарий

Популярные сообщения из этого блога

Пример взаимодействия с Odnoklassniki Rest API на C#.

Итак, как и обещал, продолжаю тему взаимодействия с различными API. В прошлый раз писал про  API ВКонтакте , сегодня напишу про API Одноклассников. Первое, что нам нужно сделать - это зарегистрироваться как разработчик на Одноклассниках. Сделать это можно по следующей ссылке  Форма регистрации разработчика приложений Получив права разработчика, необходимо зарегистрировать сайт как приложение. Подробно как это сделать можно прочитать  здесь После того как сайт будет зарегистрирован придет письмо, содержащее: Application ID: xxxxxx. Публичный ключ приложения: xxxxxxxxxxxxxxxxxxxxxxxxx. Секретный ключ приложения:  xxxxxxxxxxxxxxxxxxxxxxxxx. Ссылка на приложение: http://www.odnoklassniki.ru/games/xxxxx Используя эти данные можно начать работу с API. Для выполнения запросов к API пользователь должен авторизоваться в Одноклассниках. Добавляем на нашем сайте ссылку для авторизации пользователя: http://www.odnoklassniki.ru/oauth/authorize?client_id...

Monotouch и Monodevelop. Программируем для iOS на C# на примере нашего проекта. Часть I.

Сегодня я начинаю серию публикаций, посвященных разработке нашего первого приложения под iOS на C#. Так как это проект новый для нас, то статьи будут появляться по мере нашего продвижения в этом вопросе. Предыстория . Руководство поставило задачу своими силами сделать приложение Интернет-магазина для iPhon-ов и iPad-ов. А в дальнейшем и под Android. Как разработчики на C# мы стали изучать варианты реализации. И остановились на  Monotouch . Monotouch - это надстройка к Monodevelop, которая позволяет писать приложения под iOS на C#. Код компилируется в нативный objective C и прекрасно работает под iOS. Причем Monotouch позволяет писать не только для iOS, но и для Android. Как раз то, что нужно. Вы спросите, что такое Monodevelop? Это среда разработки на C#, работающая под Mac OS. Так сказать аналог VisualStudio для Mac-ов. И все же почему Monotouch? Ответ прост - низкий порог вхождения. Зная C# можно сразу начинать работу над приложением не тратя время на и...

Индексация блога на платформе blogger (blogspot) в Яндексе за неделю.

Прошу прощения за долгое молчание. Впредь обещаю писать чаще. Сегодня отвлечемся от программирования и затронем тему SEO (Search Engine Optimization). Могу предположить, что любой начинающий и не только блоггер хочет, чтобы его статьи были  донесены до целевой аудитории. Не секрет, что большинство посетителей переходят на блоги через поисковые системы Яндекс, Google и др. Выбрав блог на платформе blogpost я сначала не задумывался о том, как он будет индексироваться поисковыми системами и будет ли вообще. Но со временем, обратившись к этому вопросу, я понял, что Google индексирует мой блог на ура, а Яндекс и знать о нем ничего не знает. В интернете подсказали, что о новом сайте (в данном случае блоге) нужно сообщить Яндексу. Для этих целей существует  сервис "Сообщить о новом сайте'  Я добавил свой блог и начал ждать. Прошло 2 недели - результат нулевой. Тогда я добавил свой сайт в  Вебмастер  Яндекса с целью отслеживать посещения моего блога поисковым р...