http://pesec.livejournal.com/ ([identity profile] pesec.livejournal.com) wrote in [community profile] useless_faq2005-06-14 01:34 pm

Минимальный файл с точкой; 1x1

Каков минимальный размер корректного графического файла одного из общепринятых web-стандартов (GIF,JPEG,PNG), содержащего единственную чёрную точку (изображение 1x1)?

У меня пулучилось 35 байтов для GIF. А для не-сетевого формата (PNM) — 12 байтов.

Про термин «webbugs» я знаю. Мне [для души!] нужен собственно размер минимального, а не примеры. Просьба не отсылать на Google без эффективных ключевых слов.

Re: оппа!

[identity profile] ex-ch-cat325.livejournal.com 2005-06-14 08:48 am (UTC)(link)
Ну лан, я тут покапался.
Что мы имеем.
формат gif:
Идентификатор GIF
Дескриптор экрана
Глобальная таблица цветов
. . . . . .
Дескирптор изображения
Локальная таблица цветов
Растровые данные
. . . . . .
Терминатор GIF

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

Смотрим 35-байтовый гиф:

47 49 46 38 37 61 - идентификатор (GIF87a)
Дальше идет дескриптор экрана

01 00 - Ширина
01 00 - Высота
80 - хитрый байтик:
Старший бит отвечает за глобальную таблицу цветов.
То есть в нашем файле она есть.
А в описание формата ясно написано:

Глобальная таблица цветов является необязательной и
рекомендуется для изображений, где требуется точная передача

Хе-хе.
00 фон - цветовой индекс фона экрана.
01 Затем резерверд. У меня по формату gif87 он должен быть 0, а здесь 1. К чему бы это?. не знаю.
00 00 00 FF FF FF До символа 2c - идет эта самая глобальная таблица цветов.
Она задана для двух цветов. Еще и белый.

2C - символ разделитель изображения
00 00 - левый край
00 00 - верхний край
01 00 - ширина
01 00 - высота
40 - флажки всякие. (старший бит указывает отeкда брать таблицу цветов: локальную или глобальную. естественно глобальную).
Все. Дальше Растр.
Потом символ терминатора.

Файлы из одного цвета представлются любой программе непрактичными, вот она и кидает нам два цвета в палитру.
А нам нужен один.
Эксперементируем.
Убираем байты FF FF FF- проверяем.
Image
32 байта! Но по всей видимости не везде. Мозилла не понимает. В эксплорере смотрите саме. У меня в описании не сказано что должно быть минимум два цвета в палитре.

Но ничего нам не мешает вообще не использовать таблицу цветов. Пусть он используют глобальную, она по жесткому смещению. А глобальную писать не будем. Тогда будем иметь 29 байт, но хз какой цвет:
Image
Цвет зависит от программы просмотра.
Но это уже наёбка. Удивительно, то, что мозилла её понимает :)

Так что gif Всё таки действительно 35 байт