gzip для bmp изображений на лету?

Я еще не выбрал технологию, но хотел спросить. Изображения BMP большие, я сжал 3 МБ изображение до 50 КБ. Браузеры могут декодировать текст gzip, поэтому можно ли использовать gzip bmp на моем сервере и получить запрос пользователя mysite.com/images/test.bmp и распаковать мой gzip bmp с другой стороны, чтобы пользователь не заметил разницы?

6 ответов

Если возможно, используйте PNG в качестве формата изображения. Это стандарт де-факто для сжатия изображений без потерь и, вероятно, превзойдет уровень сжатия, достигаемый простым сжатием растровых изображений.

Если вам нужно использовать BMP из-за зависимостей от устаревших систем, вы можете попробовать использовать методы сжатия вывода, доступные на вашем веб-сервере, например, см. Mod_deflate для Apache. Wireshark может быть особенно полезен при тестировании / отладке таких настроек.

Gzip перед отправкой. Хорошие веб-серверы (Apache, NGINX и, вероятно, lighttpd) все поддерживают наличие "image.bmp.gz" на диске и отправку его вместо "image.bmp", если браузер его поддерживает. Добавьте это в.htaccess в apache: "AddEncoding x-gzip .gz". Я ненавижу это, когда люди думают, что сжатие файлов на лету действительно что-то спасает.

На самом деле, вы должны просто использовать PNG, так как они являются сжатыми BMP, иногда с добавленным альфа-каналом. Формат был создан, чтобы заставить людей прекратить использовать GIF-файлы, которые были алгоритмом сжатия, и, возможно, все еще находятся под патентом Unisys. Да, и bmp.gz и png будут сжиматься одинаково хорошо.

При использовании apache и mod_gzip или mod_deflate, если клиент принимает gzipped-контент, apache будет обслуживать gzipped-файл. Даже вы можете добавить файл.gz в паре с оригинальным файлом, помогающим apache с gzipping.

Если вы не хотите размещать оригинальные файлы, обычно apache ответит 404 за запрос.bmp. (У вас нет этого файла?). Но с помощью apache mod_rewrite вы можете добавить некоторые правила перезаписи для обслуживания gzipped bmp вместо возврата ошибки 404.

Пример (и не проверенный) правил переписывания:

RewriteEngine On
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteRule ^(.*).bmp$ $1.bmp.gz 

Со страницы mod_gzip sourceforge.net:

"mod_gzip - это модуль ускорения интернет-контента для популярного веб-сервера Apache. Он сжимает содержимое, доставляемое клиенту. Нет необходимости устанавливать какое-либо дополнительное программное обеспечение на клиенте!"

Я думаю, что он в основном сжимает все, что отправляет, за исключением того, что уже сжато, например, JPG или GIF и т. Д. Я думаю, что он часто включен в установках Apache по умолчанию, но вы можете Google для документов.

Я не уверен, что мой тест является репрезентативным: я сжал локальный bmp файл с gzip и попытался открыть его в Mac OS X с Safari и Firefox: он не работает (с или без .gz расширение).

Хм, интересно ziproxy http://ziproxy.sourceforge.net/ кажется, gzip "любит текст" и конвертировать изображения в JPEG.

Я вижу возможные проблемы с сжатием bmps - может не сжиматься хорошо или быстро, например. Конечно, преобразование в другой формат более совместимо с браузером. Как и предполагалось, PNG будет поддерживать все, что вам нужно, jpeg может сделать, если вы можете взломать сжатие с потерями в вашем приложении.

Не цитируйте меня по этому поводу, но я уверен, что вы можете автоматизировать это и конвертировать на лету. Я был бы склонен запускать (по ночам?) Работу, которая конвертирует bmps (используйте "convert", если вы используете unix) и переписывает ссылки.

Дайте нам немного больше "почему", и мы можем получить лучшее "как":)

Откуда приходят ваши bmp, как они работают на сервере, на какой платформе и т. Д.?

Другие вопросы по тегам