najmniejszy rozmiar pliku dla przezroczystego obrazu pojedynczego piksela
Szukam najmniejszego (pod względem rozmiaru pliku) przezroczystego 1 piksela obrazu.
Obecnie mam gif 49 bajtów, który wydaje się być najpopularniejszy.
Ale pamiętam, że wiele lat temu miałem taki, który miał mniej niż 40 bajtów. Mogło być 32 bajty.
Czy ktoś może stać się lepszy? Format graficzny nie jest problemem, o ile nowoczesne przeglądarki internetowe mogą go wyświetlać i szanować przejrzystość.
UPDATE: OK, znalazłem 42 bajtowy przezroczysty pojedynczy piksel gif: http://bignosebird.com/docs/h3.shtml
UPDATE2: wygląda na to, że coś mniej niż 43 bajty może być niestabilne w niektórych klientach. To niemożliwe.
11 answers
Sprawdź to blank.gif
pliku (43 bajty). Mniej niż 49: D
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-08 16:57:15
Oto 32 bajtowy przezroczysty GIF, który (powinien) działać wszędzie
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
Wyjaśnienie
Osiągnięcie najmniejszego możliwego GIF zależy od implementacji używanej specyfikacji GIF. Przeglądarki internetowe są zwykle pobłażliwe, jeśli chodzi o dekodowanie plików GIF. Możesz znaleźć naprawdę mały GIF, który działa jako przezroczysty w jednej przeglądarce, ale biały/czarny w innej. I może nawet nie otworzyć się w oprogramowaniu takim jak Gimp, Paint i Photoshop.
Najmniejszy near-valid przezroczysty GIF to 32 bajty. "Prawie poprawne", bo trailer i część danych LZW można wyrzucić, a i tak będzie się otwierać w praktycznie każdym oprogramowaniu.
Odbywa się to zgodnie ze specyfikacją GIF , a każdy składnik można podzielić w następujący sposób:
- sygnatura pliku / wersja, 6 bajtów
- logiczny deskryptor ekranu, 7 bajtów
- opcjonalne: globalna tabela kolorów, 6 bajtów 1
- Opcjonalnie: rozszerzenie kontroli Grafiki , 8 bajtów
- deskryptor obrazu , 10 bajtów
- dane LZW , 1-4 bajty3
- Opcjonalnie: Przyczepa (
0x3B
), 1 byte⁴
1 globalną tabelę kolorów można bezpiecznie usunąć, wyłączając ją w logicznym deskryptorze ekranu
2 jest to wymagane dla przejrzystości w większości programów
3 wymagane są tylko 3 bajty danych LZW i bajty mogą być prawie dowolne. Choć tylko pierwszy bajt 0x02
jest ściśle wymagany.
⁴ Przyczepa może zostać usunięta bez złych skutków.
Większość programów GIF wymaga obecności globalnej / lokalnej tabeli kolorów. Dalsze redukcje (np. usuwanie globalnej tabeli kolorów) mogą działać w niektórych przeglądarkach, ale ich efekty są zwykle specyficzne dla implementacji. Edit: istnieje znacznik , który wyłącza globalną tabelę kolorów i nie powoduje żadnych problemów.
Inne Przykłady:
Na po 24 bajtach jest renderowany jako przezroczysty GIF w Chrome, jednak w Firefoksie jest nieprzezroczysty biały:
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=
następujące 14 bajtów działało tylko w Chrome, ale już nie:
47 49 46 38 39 61 01 00 01 00 00 00 00 2C
data:image/gif;base64,R0lGODlhAQABAAAAACw=
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-18 05:59:26
Oto czego używam w tablicy bajtów C #(unika się dostępu do plików)
static readonly byte[] TrackingGif = { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0x1, 0x0, 0x1, 0x0, 0x80, 0x0, 0x0, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x2c, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x0, 0x0, 0x2, 0x2, 0x44, 0x1, 0x0, 0x3b };
W asp.net MVC this can be returned like this
return File(TrackingGif, "image/gif");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-04 22:06:33
Aby rozszerzyć odpowiedź na tablicę bajtów Jacoba, wygenerowałem tablicę bajtów c# dla transparant 1x1 gif, który zrobiłem w Photoshopie.
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};
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-13 10:54:37
Http://polpo.org/blank.gif jest 37-bajtowym przezroczystym gifem wykonanym za pomocą gifsicle.
W formacie CSS-ready base64:
data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-01 18:17:55
-
Zobacz: http://www.google-analytics.com/__utm.gif, 35B
-
Alternatywa w Perlu (45b):
## tinygif ## World's Smallest Gif ## 35 bytes, 43 if transparent ## Credit: http://www.perlmonks.org/?node_id=7974 use strict; my($RED,$GREEN,$BLUE,$GHOST,$CGI); ## Adjust the colors here, from 0-255 $RED = 255; $GREEN = 0; $BLUE = 0; ## Set $GHOST to 1 for a transparent gif, 0 for normal $GHOST = 1; ## Set $CGI to 1 if writing to a web browser, 0 if not $CGI = 0; $CGI && printf "Content-Length: %d\nContent-Type: image/gif\n\n", $GHOST?43:35; printf "GIF89a\1\0\1\0%c\0\0%c%c%c\0\0\0%s,\0\0\0\0\1\0\1\0\0%c%c%c\1\ +0;", 144,$RED,$GREEN,$BLUE,$GHOST?pack("c8",33,249,4,5,16,0,0,0):"",2,2,4 +0;
$ perl tinygif > tiny.gif
$ ll tiny.gif
-rw-r--r-- 1 stackoverflow staff 45B Apr 3 10:21 tiny.gif
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-03 08:52:35
Przezroczysta kropka, 43 bajty:
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";
Pomarańczowa kropka, 35 bajtów:
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";
Bez tabeli kolorów (ewentualnie pomalowanej na czarno) , 26 bajtów:
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";
Pierwsze dwa znalazłem jakiś czas temu (w czasach timthumb) i nie pamiętam źródeł. Ostatni, który znalazłem tutaj .
P. S.: używaj do śledzenia, a nie jako podkładki dystansowe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-08 23:26:46
Myślę, że jest to najbardziej pamiętny 1x1 (38 bajtów):
data:image/gif,GIF89a%01%00%01%00///;
Zgodnie ze specyfikacją nagłówka 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>
First %01%00
is width = 0x0001
Zauważ, że 1px jest %01%00
równa się 0x0001
Nie %00%01
w przeciwnym razie będzie to 0x0100
Druga to wysokość, taka sama jak wyżej
Następne 3 bajty możesz wprowadzić cokolwiek, przeglądarka może to przetworzyć
Np. ///
lub !!!
lub ,,,
lub ;;;
lub +++
Ostatni bajt musi być: ;
,
!
Przy okazji, jeśli użyjesz ///
lub \\\
W 3 bajtach obok rozmiaru
Tytuł strony wyświetli ostatni znak, w przeciwnym razie wyświetli się gif,...
Testowane z Chrome, Firefox zarówno działa, IE nie działa
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-08 17:02:28
Http://www.maproom.co.uk/0.gif to 43 bajty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-03 08:16:58
Nie powinieneś używać "GIFów dystansowych". Były one używane w latach 90-tych; teraz są bardzo przestarzałe i nie mają żadnego celu, i powodują kilka problemów z dostępnością i kompatybilnością.
Użyj CSS.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-03 08:39:10
Pamiętam, że kiedyś, dawno temu, próbowałem stworzyć jak najmniejszy gif. Jeśli postępujesz zgodnie ze standardem, o ile dobrze pamiętam, rozmiar to 32 bajty. Ale możesz "zhakować" specyfikację i mieć 26-28 bajtów, które będą widoczne w większości przeglądarek. Ten GIF nie jest do końca "poprawny", ale działa, czasami. Wystarczy użyć specyfikacji nagłówka GIF i edytora szesnastkowego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-02 23:21:17