Почему гифки такие маленькие? Объяснение принципов сжатия GIF
Это сжатие придало GIF свойства, в то время больше похожие на суперспособности. Предыдущие инновации в сжатии изображений, типа "кодирования длин серий", сжимали файлы упрощением последовательностей повторяющихся данных. Строка пикселей в картинке, хранящаяся без сжатия, например, " один чёрный пиксель, один чёрный пиксель, один чёрный пиксель" сжималась в «три чёрных пикселя». Кодирование длин серий нормально справлялось с простыми чёрно-белыми изображениями, но задохнулось бы, работая с несколькими десятками цветов, а уж их смешением просто подавилось бы.
Более сложный подход, реализованный в LZW, позволял компьютерам сжимать строки данных гораздо более сложные, чем просто несколько одинаковых пикселей подряд – главное, чтобы там был хоть какой-то повторяющийся шаблон. Суть метода походила на то, как если бы компьютер изобретал новое слово «силый» вместо последовательности «синий пиксель, белый пиксель», а потом «силолетовый» вместо последовательности «силый пиксель, фиолетовый пиксель» и так далее, впихивая всё больше и больше информации в новое слово. Это подход позволил GIF уменьшать фотореалистичные цветные изображения с перемежающимися цветами в небольшие практичные упаковки.
Помню программировал LZW компрессию на js для Пикабу, полагаясь только википедию. Ух, много пришлось пиво выпить чтобы понять как она устроена :)
Отсюда https://geektimes.ru/post/279960/