<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом gif</title>
<link>https://www.blogengine.me/blogs/tags/gif/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Сжатый несжатый GIF</title>
<guid isPermaLink="false">130422</guid>
<link>https://bolknote.ru/all/3707/</link>
<pubDate>Wed, 08 Aug 2012 10:43:00 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/3707/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Как многие знают, браузер нативно понимает сжатие &lt;i&gt;gzip&lt;/i&gt; (алгоритм &lt;a href="http://ru.wikipedia.org/wiki/DEFLATE"&gt;DEFLATE&lt;/a&gt;). Наконец-то браузеры научились с ним правильно работать, после стольких лет мучений — сжимать можно что угодно, достаточно просто указать правильный заголовок.&lt;/p&gt;
&lt;p&gt;Графический файлы обычно так не сжимают — внутри у них свой алгоритм сжатия, например в &lt;i&gt;ПНГ&lt;/i&gt; используется тот же &lt;i&gt;DEFLATE&lt;/i&gt;. Но с ГИФом ситуация хуже — у него внутри более старый алгоритм &lt;i&gt;LZW&lt;/i&gt;, к тому же нет никаких оптимизационных техник (например, &lt;i&gt;ПНГ&lt;/i&gt; использует так называемые «фильтры», которые позволяют эффективно сжимать градиенты.&lt;/p&gt;
&lt;p&gt;Вот я и подумал — нельзя ли как-то заменить алгоримт сжатия ГИФа с внутреннего &lt;i&gt;LZW&lt;/i&gt; на внешний &lt;i&gt;gzip&lt;/i&gt;? Если было бы нельзя, я бы эту заметку не писал.&lt;/p&gt;
&lt;p&gt;Смотрите, слева у вас на экране ГИФ, сжатый при помощи &lt;i&gt;gzip&lt;/i&gt; (так и грузится с сервера), справа — ПНГ.&lt;/p&gt;
&lt;div style="width: 400px"&gt;&lt;div style="width:50%; float:left"&gt;&lt;p&gt;&lt;img src=/imgs/2012.08.08.gif-gz width=46 height=46&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="width:50%; float:left"&gt;&lt;p&gt;&lt;img src=/imgs/2012.08.08.png  width=46 height=46&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br clear="both"&gt;&lt;/p&gt;
&lt;p&gt;В каждом из них равное количество уникальных цветов, ПНГ пропущен через все оптимизаторы, которые я только нашёл. При этом ПНГ занимает 1374 байта, а гзипованный ГИФ — 1347, на 27 байт меньше. Дело тут конечно, не в паре десятков байт, а в принципе — если бы я выбрал картинку побольше, выигрыш, возможно, был бы существеннее.&lt;/p&gt;
&lt;p&gt;Почему же &lt;i&gt;LZW&lt;/i&gt; внутри ГИФа, плюс &lt;i&gt;DEFLATE&lt;/i&gt; снаружи сделали файл меньше, чем оптимизирующие просто &lt;i&gt;DEFLATE&lt;/i&gt;, плюс фильтры в случае ПНГ? Обычно наложение одного сжимающего алгоритма на другой делает файл больше сравнению с применением одного, более удачного алгоритам из двоих.&lt;/p&gt;
&lt;p&gt;Дело в том, что в ГИФ я использовал &lt;i&gt;несжатый&lt;/i&gt;, он подготовлен специальным образом, так, что его собственный алгоритм сжатия не работает, а &lt;i&gt;gzip&lt;/i&gt; работает над несжатым потоком данных.&lt;/p&gt;
&lt;p&gt;Самый простой, по моему мнению, способ получить такой файл — пропустить его через утилиту &lt;i&gt;gifinter&lt;/i&gt; из набора &lt;a href="http://directory.fsf.org/wiki/Libungif"&gt;libungif&lt;/a&gt; — библиотеки и набора утилит для работы с несжатыми файлами ГИФ.&lt;/p&gt;
&lt;p&gt;Утилиты эти отлично скомпилировались под мой «Мак» и обрабатывал я ГИФ следующим образом: для начала оптимизировал его при помощи &lt;i&gt;giflite&lt;/i&gt; (эта старая утилита под &lt;i&gt;DOS&lt;/i&gt;, которую я запускаю из-под &lt;i&gt;dosbox&lt;/i&gt;, творит с ГИФами чудеса), потом пропустил через утилиту, вырезающую из ГИФа комментарии (их туда вставил &lt;i&gt;giflite&lt;/i&gt;), только после этого пропустил файл через &lt;i&gt;gifinter&lt;/i&gt; и сжал при помощи &lt;i&gt;gzip&lt;/i&gt;:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;gifinter optimized.gif &amp;gt; non-compressed.gif
gzip -9n non-compressed.gif&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Дальше я переименовал файл в 2012.08.08.gif-gz и добавил в конфигурацию своего «Апача» следующие строки:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;AddEncoding gzip .gif-gz
AddType image/gif .gif-gz&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Теперь при запросе сервер будет выдавать все необходимые заголовки:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;bolk@Bolk ~  $ telnet bolknote.ru 80
Trying 91.230.61.15...
Connected to bolknote.ru.
Escape character is &amp;#039;^]&amp;#039;.
HEAD /imgs/2012.08.08.gif-gz HTTP/1.0
Host: bolknote.ru
Accept-encoding: gzip

HTTP/1.1 200 OK
Server: nginx
Date: Wed, 08 Aug 2012 06:12:14 GMT
Content-Type: image/gif
Content-Length: 1347
Connection: close
Accept-Ranges: bytes
Cache-Control: max-age=2592000
Expires: Fri, 07 Sep 2012 06:12:14 GMT
Content-Encoding: gzip&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Если интересно как устроен несжатый ГИФ, об этом &lt;a href="http://en.wikipedia.org/wiki/File:Quilt_design_as_46x46_uncompressed_GIF.gif"&gt;можно прочитать&lt;/a&gt; в Википедии, откуда я взял картинку, там интересная уличная магия, перепечатывать «Википедию» не очень-то интересно.&lt;/p&gt;
&lt;p&gt;Готовой разгадки почему сжатый несжатый ГИФ обогнал ПНГ у меня нет, но есть одно возможное соображение — ГИФ чуть-чуть компактнее ПНГ, кроме того, ГИФ сжат целиком, тогда как в ПНГ сжата только картинка. Если моё предположение правда, то хорошего выигрыша ждать не сто́ит, но списывать формат ГИФ со счетов тоже не нужно.&lt;/p&gt;
&lt;p&gt;По-настоящему опыт ценен, если удасться сделать несжатую ГИФ-анимацию (этого я ещё не пробовал) и сжать её при помощи &lt;i&gt;gzip&lt;/i&gt;. Если удасться, это будет очень полезно, буду держать вас в курсе.&lt;/p&gt;
</description>
</item>

<item>
<title>Internet Explorer показывает не все GIF</title>
<guid isPermaLink="false">123692</guid>
<link>https://bolknote.ru/all/3068/</link>
<pubDate>Sun, 16 Jan 2011 22:26:00 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/3068/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://bolknote.ru/pictures/2011.01.16.gif" width="80" height="80" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;IE, не покажи этот GIF!&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Нашёл в ЖЖ DiBR’а &lt;a href="http://dibr.livejournal.com/357116.html"&gt;GIF, который не показывает Internet Explorer&lt;/a&gt;. Забавно, хотя в отличие от &lt;a href="https://bolknote.ru/all/3050/"&gt;JPEG, который не показывает современная «Опера»&lt;/a&gt;, этот GIF несколько некорректен.&lt;/p&gt;
&lt;p&gt;Вот текст комментария из ЖЖ, который разъясняет принцип:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Согласно описанию формата, сразу за заголовком («GIF89a») идет &lt;i&gt;Logical Screen Descriptor&lt;/i&gt; (в котором как раз и прописан размер 80×80), затем &lt;i&gt;Global Color Table&lt;/i&gt;, а уж за ним — всякие &lt;i&gt;Extensions&lt;/i&gt; и данные изображений. В обсуждаемом файле &lt;i&gt;Global Color Table&lt;/i&gt; просто отсутствует (так что &lt;i&gt;IE&lt;/i&gt; ведет себя вполне адекватно). Зато присутствует картинка размером 100×100, которую и видят менее привередливые рендереры.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
</item>

<item>
<title>Фокусы с GIF, прозрачность и hover</title>
<guid isPermaLink="false">130909</guid>
<link>https://bolknote.ru/all/1436/</link>
<pubDate>Thu, 01 Nov 2007 15:41:00 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/1436/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;style type="text/css"&gt;
a.link-2007-11-01-gun { border: 0 }
a.link-2007-11-01-gun:hover img { background: black }
a.link-2007-11-01-gun img { margin: 0px; border-right: 2px solid black; background: white }
&lt;/style&gt;
&lt;div style="float: left; width: 115px; height: 29px; margin: 10px"&gt;&lt;p&gt;&lt;a href="#" class="link-2007-11-01-gun" align="left"&gt;&lt;img src="/imgs/2007.11.01.03.gif" border="0" width="115" height="29" alt="" align="center" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;Самые внимательные, наверное, заметили, что в прошлых заметках у меня на картинке использовалась эмуляция эффекта наведения на ссылку — посмотрите, если навести на картинку мышку, «ссылка», выделенная синим, на картинке подчеркнётся. И это не JavaScript.&lt;/p&gt;
&lt;p&gt;Объяснение очень простое — картинка сделана с прозрачностью, далее при помощи CSS под неё подставлен белый фон, а при наведении (селектор «:hover») фон меняется на голубой. Такой же эффект использован на картинке с пистолетом слева (наведите мышку). Ссылка на картинке обязательна — без неё в Internet Explorer (версии ниже 7-й) фон менять не будет, «:hover» просто не сработает. Таблица стилей для этой картинки выглядит вот так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;a.gun:hover img { background: black } /* стиль при наведении мышкой */
a.gun img { margin: 0px; background: white } /* убираем поля в Opera и подкладываем белый фон */&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;HTML, соотвественно:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;gun&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;gun.gif&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Если вам не ясно, почему пистолетик «стреляет» (т. е. почему изображение движется, когда наводишь мышку), то тут всё просто — прозрачная область движется (это animated GIF), на белом фоне этого не видно, когда фон меняется, создаётся эффект движущейся пули.&lt;/p&gt;
&lt;p&gt;Ещё интересные эффекты можно получить, если использовать альфа-канал (полупрозрачность) в формате PNG, но, к сожалению, об анимации тут придётся забыть.&lt;/p&gt;
</description>
</item>


</channel>
</rss>