Какой самый большой размер изображения формата PNG в наименьшем количестве байт?
Программист Дэвид Фифилд с сайта bamsoftware.com заинтересовался данным вопросом и пришел к удвительным выводам. Он создал картинку, размеры которой не умещаются в оперативной памяти, вызывая зависание системы.
Запакованный bzip2-файл ( https://www.bamsoftware.com/bzr/deflate/spark.png.bz2 ) имеет размер всего 420 байт. В нем лежит сжатый PNG-файл. При распаковке картинка занимает 6132534 байт или 5,8 мегабайт и имеет разрешение 225000 на 225000 пикселей (50,625 гигапикселей). Для просомтра такого изображения требуется около 141 гигабайта оперативной памяти. На незащищенных от подобной «бомбы» фото-хостингах, форумах и прочих сайтах, где можно загрузить и посмотреть картинку, таким образом можно запросто положить сервера.
PNG использует алгоритм сжатия DEFLATE в библиотеке zlib.Сначала DEFLATE заменяет повторяющиеся строки указателями, при этом каждая пара бит кодирует 258 одинаковых байтов с нулями. Степень компрессии составляет 1032 к 1.Затем за дело берётся bzip2, который сжимает длинный набор одинаковых значений в максимально компактный вид.Картинка почти полностью состоит из нулей, внутри находится секретное послание. Для лучшего сжатия используется однобитное цветовое пространство, хотя большинство программ для рендеринга графики всё равно резервируют по три бита на пиксель и разворачивают картинку в 141,4 гигабайта.