透明单像素图像的最小文件大小

zaf*_*zaf 62 graphics transparency image filesize

我正在寻找最小的(在文件大小方面)透明的1像素图像.

目前我有一个49字节的GIF,似乎是最受欢迎的.

但我记得多年前有一个不到40个字节.本来可以是32个字节.

谁能做得更好?只要现代Web浏览器可以显示图形格式并尊重透明度,图形格式就不用担心了.

更新:好的,我发现了一个42字节的透明单像素gif:http: //bignosebird.com/docs/h3.shtml

UPDATE2:看起来在某些客户端中,小于43字节的任何内容都可能不稳定.不能拥有那个.

bry*_*ryc 82

这是一个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
Run Code Online (Sandbox Code Playgroud)

说明

实现尽可能小的GIF取决于所使用的GIF规范的实现.在解码GIF文件时,Web浏览器通常很宽松.您可能会发现一个非常小的GIF,在一个浏览器中可以透明,而在另一个浏览器中则是白色/黑色.它甚至可能不会在像Gimp,Paint和Photoshop这样的软件中打开.

最小的近有效透明GIF是32字节."近乎有效",因为预告片和一些LZW数据可以被丢弃,并且它仍然可以在几乎所有软件中打开.

这是通过遵循GIF规范来完成的,每个组件可以按如下方式细分:

  1. 文件签名/版本,6个字节
  2. 逻辑屏幕描述符,7个字节
  3. 可选:全局颜色表,6个字节¹
  4. 可选:图形控制扩展,8字节²
  5. 图像描述符,10个字节
  6. LZW数据,1-4字节³
  7. 可选:预告片(0x3B),1个字节⁴

¹ 可以通过在逻辑屏幕描述符中禁用全局颜色表来安全地删除全局颜色表 ²这是大多数软件透明度所必需的 ³只需要3个字节的LZW数据,字节几乎可以是任何字节.虽然只有第一个字节是严格要求的. ⁴可以移除拖车而不会产生不良影响.

0x02

大多数GIF软件都需要全局/本地颜色表.进一步减少(例如删除全局颜色表)可能在某些浏览器中有效,但它们的效果通常是特定于实现的.编辑:有一个标志可以禁用全局颜色表,它似乎不会导致任何问题.

其他例子:

以下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=
Run Code Online (Sandbox Code Playgroud)

以下14个字节仅用于Chrome,但不再适用:

47 49 46 38 39 61 01 00 01 00 00 00 00 2C

data:image/gif;base64,R0lGODlhAQABAAAAACw=
Run Code Online (Sandbox Code Playgroud)

  • +1,用于了解/解释工艺.=) (8认同)

Jac*_*cob 27

这是我在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 };
Run Code Online (Sandbox Code Playgroud)

在asp.net MVC中,可以像这样返回

return File(TrackingGif, "image/gif");
Run Code Online (Sandbox Code Playgroud)


gmu*_*rmn 20

签出此blank.gif 文件(43个字节).小于49:D

  • 看起来像Blank.gif不透明.你可以使用它(rember删除"/"之后的空格):data:image/gif; base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAAAAAAAAAAAAAAAAAAAA (10认同)

Mic*_*lle 18

为了扩大对雅各布的字节数组的答案,我产生了对C#的字节数组TRANSPARANT 1x1的GIF我在Photoshop做.

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};
Run Code Online (Sandbox Code Playgroud)


小智 14

http://polpo.org/blank.gif是一个用gifsicle制作的37字节透明GIF.

在css-ready base64格式中:

data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==
Run Code Online (Sandbox Code Playgroud)


mik*_*iku 7

  • 请参阅:http://www.google-analytics.com/__utm.gif,35B

  • 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;
    
    Run Code Online (Sandbox Code Playgroud)

运行 ...

$ perl tinygif > tiny.gif
$ ll tiny.gif
-rw-r--r--  1 stackoverflow  staff    45B Apr  3 10:21 tiny.gif
Run Code Online (Sandbox Code Playgroud)