67

最小の(ファイルサイズで)透明な1ピクセルの画像を探しています。

現在、私は49バイトのgifを持っていますが、これが最も人気があるようです。

しかし、私は何年も前に40バイト未満のものを持っていたことを覚えています。32バイトである可能性があります。

誰かがもっとうまくやれるでしょうか?グラフィック形式は、最新のWebブラウザーで表示でき、透明度を尊重できる限り、問題ありません。

更新:OK、42バイトの透明な単一ピクセルgifを見つけました:http: //bignosebird.com/docs/h3.shtml

UPDATE2:一部のクライアントでは43バイト未満のものが不安定になる可能性があるようです。それを持つことはできません。

4

11 に答える 11

91

最小の有効な透明 GIF は 35 バイトです。

data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEAAAAALAAAAAABAAEAAAIBAAA=

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 01 00 00

これは、基本的にすべての画像エディター/ビューアーだけでなく、新旧のすべてのブラウザーで機能するはずです。ただし、PHP のイメージ ライブラリにあるような弱い GIF パーサーでは機能しない可能性があります。

完全に確実にする必要がある場合、最小値は 41 バイトです。

data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAAAAAAALAAAAAABAAEAAAIBAAA=

47 49 46 38 39 61 01 00 01 00 80 00 00 FF FF FF FF FF FF 21 F9 04
00 00 00 00 00 2C 00 00 00 00 01 00 01 00 00 02 01 00 00

これが説明です。

可能な最小の GIF は、GIF 仕様のさまざまな実装間で、さらには時間の経過とともに変化する可能性があります。Web ブラウザは、多くの場合、寛容で GIF のレンダリングに一貫性がなく、部分的に破損した GIF を表示することができます。この回答の歴史を通じて、Chrome でのみ透過的な 14 バイトの GIF を作成しましたが、これは機能しなくなりました。Chrome と Firefox で動作する 23 バイト バージョンがありましたが、最終的に Firefox では透過的ではなくなりました。どこでも動作すると思っていた 32 バイト バージョンに落ち着きましたが、後で Safari 14 では動作しないことがわかりました。Safari 14 を修正した 33 バイト バージョンでさえ、Safari 15 では動作しなくなりました。したがって、標準に従う方が良いことは明らかであり、永遠に機能しない可能性のあるハックなソリューションに依存することはありません。また、スペーサー GIF は 1996 年以降関連性がなくなっていることにも言及する必要がありますが、実際には使用しないでください。代わりに CSS を使用してください。GIFについて詳しく知るために、この回答を書きました。

公式の GIF 仕様に従うと、次の部分で構成される 43 バイトの数値が得られます。

  1. ファイル署名、6 バイト
  2. 論理画面記述子、7 バイト
  3. グローバル カラー テーブル、6 バイト
  4. グラフィックス コントロール拡張、8 バイト
  5. イメージ記述子、10 バイト
  6. 圧縮された LZW 画像データ、5 バイト
  7. トレーラー( 0x3B)、1 バイト

これの一部は技術的にオプションです。たとえば、Trailer バイトは安全に省略でき、画像のレンダリングを妨げることはありません。LZW データは、サブブロック数を 2ではなく 1 に変更することで 4 バイトに減らすことができます。これにより、上記の 41 バイトの GIF が得られます。その後、ビット フラグをオフにすることでグローバル カラー テーブルを安全に無効にできます。これはすべてのブラウザーで安全に機能しますが、不適切な GIF パーサーを混乱させる可能性があります。これで上の 35 バイトが得られます。

于 2013-04-11T23:58:56.243 に答える
30

これが私が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");
于 2010-06-04T22:06:33.627 に答える
20

このblank.gif ファイル(43バイト)をチェックアウトします。49未満:D

于 2010-04-03T08:21:10.970 に答える
19

ジェイコブのバイト配列の回答を拡張するために、フォトショップで作成した透明な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};
于 2011-12-13T10:54:37.290 に答える
15

http://polpo.org/blank.gifは、gifsicle で作成された 37 バイトの透過 GIF です。

CSS 対応の base64 形式:

data:image/gif;base64,R0lGODlhAQABAHAAACH5BAUAAAAALAAAAAABAAEAAAICRAEAOw==
于 2013-02-01T18:17:55.210 に答える
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;
    

それを実行します ...

$ perl tinygif > tiny.gif
$ ll tiny.gif
-rw-r--r--  1 stackoverflow  staff    45B Apr  3 10:21 tiny.gif
于 2010-04-03T08:24:51.230 に答える
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";

最初の 2 つは少し前 (timthumb 脆弱性の時代) に見つけたもので、ソースを覚えていません。ここで見つけた最新のもの。

PS: スペーサーとしてではなく、追跡目的で使用してください。

于 2012-12-08T23:26:46.997 に答える
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 は 0x0001 に%01%00等しいことに注意してください

それ%00%01以外の場合は 0x0100 になります

2 番目は高さで、上記と同じです

次の 3 バイトは何でも入力でき、ブラウザはそれを解析できます

///または!!!または,,,または;;;または+++

最後の 1 バイトは次のようにする必要があります。; , !

ちなみに///orを使う場合\\\は size の横の 3 バイトで

ページ タイトルは最後の文字を表示します。それ以外の場合は表示されますgif,...

Chrome でテスト済み、Firefox は両方とも動作しましたが、IE は動作しません

于 2015-05-04T10:04:07.027 に答える
0

http://www.maproom.co.uk/0.gif 43バイトで、少し削ります。

于 2010-04-03T08:16:58.007 に答える
0

昔、できるだけ小さいGIFを作ろうとしたことを覚えています。標準に従えば、私の記憶が正しければ、サイズは 32 バイトです。しかし、仕様を「ハック」して、ほとんどのブラウザーで表示される 26 ~ 28 バイトを使用することができます。この GIF は完全に「正しい」わけではありませんが、機能する場合もあります。GIF ヘッダー仕様と HEX エディターを使用するだけです。

于 2010-04-05T08:41:56.477 に答える
0

「スペーサー gif」は実際には使用しないでください。それらは90年代に使用されました。現在、それらは非常に時代遅れであり、何の目的もなく、いくつかのアクセシビリティと互換性の問題を引き起こしています.

CSS を使用します。

于 2010-04-03T08:27:38.027 に答える