Я ищу самое маленькое (с точки зрения размера файла) прозрачное изображение на 1 пиксель.
В настоящее время у меня есть gif 49 байтов, который, кажется, является самым популярным.
Но я помню много лет назад имеющий тот, который составлял меньше чем 40 байтов. Возможно, были 32 байта.
Кто-либо может добиться большего успеха? Графический формат не является никаким беспокойством, пока современные веб-браузеры могут отобразить его и уважать прозрачность.
ОБНОВЛЕНИЕ: хорошо, я нашел 42-байтовый прозрачный единственный пиксель gif: http://bignosebird.com/docs/h3.shtml
UPDATE2: Похож на что-либо, что меньше чем 43 байта могли бы быть нестабильными в некоторых клиентах. Не может иметь этого.
Вот 32 байта, прозрачные GIF, который (должен) работать везде
data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEAAAAALAAAAAABAAEAAAI=
47 49 46 38 39 61 01 00 01 00 00 00 00 21 F9 04
01 00 00 00 00 2C 00 00 00 00 01 00 01 00 00 02
, Достижение самого маленького GIF зависит от реализации используемой спецификации GIF. Веб-браузеры обычно снисходительны когда дело доходит до декодирования файлов GIF. Можно найти действительно маленький GIF, который работает прозрачным в одном браузере, но белым/черным в другом. И это даже не могло бы открыться в программном обеспечении как Калека, Краска и Photoshop.
самое маленькое почти допустимый прозрачный GIF составляет 32 байта. “Near-valid”, потому что трейлер и некоторые данные LZW может быть отброшен, и он все еще откроется в практически всем программном обеспечении.
Это сделано следующим спецификация GIF, и каждый компонент может быть сломан следующим образом:
0x3B
), 1 byte⁴ ¹ Таблица глобального цвета может быть удалена безопасно путем отключения его в Логический Экранный Дескриптор
² Это требуется для прозрачности в большей части программного обеспечения
³ Только 3 байта данных LZW требуются, и байты могут быть почти чем-либо. Хотя только первый байт 0x02
строго требуется.
⁴ Трейлер может быть удален без вредных воздействий.
программное обеспечение Most GIF требуют, чтобы присутствовали Глобальная Таблица / Таблица Местного колорита. Дальнейшие сокращения (например, удаляющий Таблицу глобального цвета) могут работать в некоторых браузерах, но их эффекты являются обычно определенными для реализации. Редактирование: существует флаг для отключения Таблицы глобального цвета, и это, кажется, не вызывает проблем.
следующие 24 байта представляются как прозрачный GIF в Chrome, однако это - непрозрачный белый в Firefox:
47 49 46 38 39 61 01 00 01 00 00 00 00 2C 00 00 00 00 01 00 01 00 00 02
data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA=
следующие 14 байтов раньше работали в Chrome только, но не больше:
47 49 46 38 39 61 01 00 01 00 00 00 00 2C
data:image/gif;base64,R0lGODlhAQABAAAAACw=
http://polpo.org/blank.gif является 37-байтовым прозрачным GIF, сделанным с gifsicle.
В готовом к CSS base64 формате:
data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==
Прозрачная точка, 43 байта:
echo "\x47\x49\x46\x38\x39\x61\x1\x0\x1\x0\x80\x0\x0\xff\xff\xff\xff\xff";
echo "\xff\x21\xf9\x04\x1\x0a\x0\x1\x0\x2c\x0\x0\x0\x0\x1\x0\x1\x0";
echo "\x0\x2\x2\x4c\x1\x0\x3b";
Оранжевая точка, 35 байтов:
echo "\x47\x49\x46\x38\x37\x61\x1\x0\x1\x0\x80\x0\x0\xfc\x6a\x6c\x0";
echo "\x0\x0\x2c\x0\x0\x0\x0\x1\x0\x1\x0\x0\x2\x2\x44\x1\x0\x3b";
Без таблицы цветов (возможно нарисованный как черный), 26 байтов:
echo "\x47\x49\x46\x38\x39\x61\x1\x0\x1\x0\x0\xFF";
echo "\x0\x2C\x0\x0\x0\x0\x1\x0\x1\x0\x0\x2\x0\x3B";
первые два я нашел некоторое время назад (во времена timthumb уязвимости), и я не помню источники. Последний я нашел здесь .
P.S.: Используйте для отслеживания целей, не как распорные детали.
Я думаю, что это самым незабываемым 1x1 (38 байтов):
data:image/gif,GIF89a%01%00%01%00///;
Согласно спецификации заголовка GIF:
GIF Header
Offset Length Contents
0 3 bytes "GIF"
3 3 bytes "87a" or "89a"
6 2 bytes <Logical Screen Width>
8 2 bytes <Logical Screen Height>
Первый %01%00
ширина = примечание 0x0001
, что 1 пкс %01%00
, равняется 0x0001
не %00%01
иначе, это будет 1121-секундный 0x0100
следующие 3 байта, можно ввести что-либо, браузер может проанализировать его
, например, ///
или !!!
или ,,,
или ;;;
или +++
, последний один байт должен быть: ;
,
!
между прочим, если Вы используете ///
или \\\
на уровне 3 байтов рядом с размером
, название страницы отобразит последний знак, иначе покажет gif,...
протестированный с Chrome, Firefox, оба работали, IE не делает работ
Чтобы подробно остановиться на ответе массива байтов Jacob, я генерировал c# массив байтов для прозрачный 1x1 gif, я сделал в фотошопе.
static readonly byte[] TrackingGif = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x01, 0x00, 0x01, 0x00, 0x81, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0x0b, 0x4e, 0x45, 0x54, 0x53, 0x43, 0x41, 0x50, 0x45, 0x32, 0x2e, 0x30, 0x03, 0x01, 0x01, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x08, 0x04, 0x00, 0x01, 0x04, 0x04, 0x00, 0x3b};