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

Изменение размера картинок на 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...

C# и API ВКонтакте. Обращение к адресу API-сервиса путем создания HTTP-запроса (POST)

В статье  C# POST. Отправляем запросы на адрес стороннего сервера  я рассказал про метод, с помощью которого можно работать с различным API, принимающими POST запрос и возвращающими ответ в виде json или xml. Сегодня я хочу написать, как я применял этот метод при работе с API  ВКонтакте. Для примера возьму задачу получения через API списка групп, в которых состоит пользователь. В первую очередь необходимо зарегистристрировать наш сайт как приложение ВКонтакте. Заходим по ссылке  http://vk.com/editapp?act=create&site=1  и подключаем наш сайт. Дальше задача  делится на две подзадачи, а именно: авторизация пользователя и обращение к API для получения списка групп. Для авторизации мы пользователю предлагаем перейти по следующей ссылке: http://api.vkontakte.ru/oauth/authorize? response_type=code&redirect_uri={0} &client_id={1} &scope={2} &display=page , redirect_uri - адрес страницы нашего сайта, куда будет возвращен пользоват...

Мониторинг нагрузки на сайт под управлением IIS средствами Windows Server. Показатели посещаемости.

Как мониторить нагрузку на сайт? Если мы хотим добиться бесперебойной работы сайта, то мы должны быть постоянно в курсе, что происходит с сайтом в данный момент времени. Чтобы в случае возникновения проблем быстро среагировать на них. В компании, где я сейчас работаю, в кабинете программистов висит ЖК телевизор-монитор, подключенный к компьютеру. На мониторе отображаются графики нагрузки на сервера, список  всех работающих сайтов со статусом доступности, а также онлайн статистика посещаемости из Google Analytics (в режиме реального времени отображается количество текущих пользователей на основном сайте в разрезе географии). Итак, какие показатели Веб-сервера мы считаем полезными для отображения на мониторе. Их четыре: % загрузки процессора, % использования выделенной памяти, всего запросов методов в секунду (Веб-служба), запросов в секунду (ASP.NET Apps). С первыми двумя все понятно. Счетчик В сего запросов методов в секунду (Веб-служба) - это  частота запросов HTTP,...