самый маленький размер файла для прозрачного единственного пиксельного изображения

Я ищу самое маленькое (с точки зрения размера файла) прозрачное изображение на 1 пиксель.

В настоящее время у меня есть gif 49 байтов, который, кажется, является самым популярным.

Но я помню много лет назад имеющий тот, который составлял меньше чем 40 байтов. Возможно, были 32 байта.

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

ОБНОВЛЕНИЕ: хорошо, я нашел 42-байтовый прозрачный единственный пиксель gif: http://bignosebird.com/docs/h3.shtml

UPDATE2: Похож на что-либо, что меньше чем 43 байта могли бы быть нестабильными в некоторых клиентах. Не может иметь этого.

62
задан 6 April 2010 в 13:20

5 ответов

Вот 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, и каждый компонент может быть сломан следующим образом:

  1. подпись/версия Файла, 6 байтов
  2. Логический Экранный Дескриптор , 7 байтов
  3. Дополнительный: Таблица , 6 глобального цвета bytes¹
  4. Дополнительный: Графическое Расширение Управления , 8 bytes²
  5. Дескриптор Изображения , 10 байтов
  6. Данные LZW , 1-4 bytes³
  7. Дополнительный: Трейлер (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=
81
ответ дан 31 October 2019 в 13:23

http://polpo.org/blank.gif является 37-байтовым прозрачным GIF, сделанным с gifsicle.

В готовом к CSS base64 формате:

data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==
14
ответ дан 31 October 2019 в 13:23

Прозрачная точка, 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.: Используйте для отслеживания целей, не как распорные детали.

4
ответ дан 31 October 2019 в 13:23

Я думаю, что это самым незабываемым 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 не делает работ

1
ответ дан 31 October 2019 в 13:23

Чтобы подробно остановиться на ответе массива байтов 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};
18
ответ дан 31 October 2019 в 13:23

Другие вопросы по тегам:

Похожие вопросы: