我正在寻找最小的(在文件大小方面)透明的1像素图像。
目前我有一个49字节的gif,这似乎是最受欢迎的。
但我记得很多年前有一个不到40个字节。可能是32个字节。
任何人都可以做得更好吗?只要现代Web浏览器可以显示图形格式并尊重透明度,图形格式就不用担心了。
更新:好的,我找到了一个42字节的透明单像素gif: http://bignosebird.com/docs/h3.shtml
UPDATE2 :看起来在某些客户端中,少于43个字节的内容可能不稳定。不能有那个。
答案 0 :(得分:80)
这是32 byte transparent 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文件时,Web浏览器通常很宽松。您可能会发现一个非常小的GIF,在一个浏览器中可以透明,而在另一个浏览器中则是白色/黑色。它甚至可能不会在像Gimp,Paint和Photoshop这样的软件中打开。
最小的接近有效的透明GIF是32个字节。 “接近有效”,因为预告片和一些LZW数据可以丢弃,并且几乎所有软件仍然会打开。
这是通过遵循GIF spec来完成的,每个组件都可以按如下方式细分:
0x3B
),1字节⁴¹全局颜色表可以通过在Logical Screen Descriptor中禁用全局颜色表来安全删除
²这是大多数软件透明度所必需的
³只需要3个字节的LZW数据,字节几乎可以是任何字节。虽然只有0x02
的第一个字节是严格要求的
⁴可以移除拖车而不会产生不良影响。
大多数GIF软件都需要全局/本地颜色表。进一步减少(例如删除全局颜色表)可能在某些浏览器中有效,但它们的效果通常是特定于实现的。 编辑:有一个flag来禁用全局颜色表,它似乎不会导致任何问题。
以下24个字节在Chrome中呈现为透明GIF,但在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=
答案 1 :(得分:26)
这是我在C#字节数组中使用的内容(避免文件访问)
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 };
在asp.net MVC中,可以像这样返回
return File(TrackingGif, "image/gif");
答案 2 :(得分:20)
签出此blank.gif
文件(43个字节)。少于49:D
答案 3 :(得分:18)
为了扩展雅各布的字节数组答案,我为我在photoshop中制作的 transparant 1x1 gif生成了c#字节数组。
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};
答案 4 :(得分:14)
http://polpo.org/blank.gif是一个用gifsicle制作的37字节透明GIF。
以css-ready base64格式:
data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==
答案 5 :(得分:7)
Perl中的替代方案(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
答案 6 :(得分:4)
透明点,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漏洞的时代),我不记得消息来源。我找到的最新版here。
P.S。:用于追踪目的,而非隔离物。
答案 7 :(得分:1)
我认为这是最令人难忘的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
是width = 0x0001
请注意,1px是%01%00
等于0x0001
不是%00%01
否则它将是0x0100
第二是身高,与上述相同
接下来3个字节你可以输入任何内容,浏览器可以解析它
e.g。 ///
或!!!
或,,,
或;;;
或+++
最后一个字节必须是:;
,
!
///
或\\\
页面标题将显示最后一个字符,否则将显示gif,...
答案 8 :(得分:0)
http://www.maproom.co.uk/0.gif是43个字节,刮一点。
答案 9 :(得分:0)
你不应该真的使用“spacer gifs”。他们在90年代使用;现在它们已经过时了,它们没有任何目的,它们会导致一些可访问性和兼容性问题。
使用CSS。
答案 10 :(得分:0)
我记得有一次,很久以前,我试图创造出最小的GIF。如果你遵循标准,如果我没记错的话,大小是32字节。但是你可以“破解”规范并拥有26-28字节,这将在大多数浏览器中显示。这个GIF并不完全“正确”,但有时会起作用。只需使用GIF标头规范和HEX编辑器。