選一個 GIF
—
瀏覽器內建的解碼器,按檔案原樣播放。
- 版本
- —
- 畫布
- —
- 檔案大小
- —
- 幀數
- —
- 檔案寫的時長
- —
- 實際播的時長
- —
- 循環
- —
- 用到的顏色
- —
顯眼的地方
下面每一條都是從這個檔案上量出來的,沒有一條是在猜你本來想做什麼。
位元組去了哪裡
檔案的每個位元組都恰好落在某一行裡,各行加起來正好是這個檔案。要是加不上,最後一行會明說,而不是讓那根條子悄悄拉長湊數。
和下面表格裡同樣的數字,畫成一根條子。
| 部分 | 位元組 | 佔比 |
|---|---|---|
| 整個檔案 | — | 100% |
逐幀看
顏色
全域性顏色表
每幀各自的顏色表
裡面還有些什麼
不帶畫面的塊。檢視器全都跳過,而檔案的每一份副本還是照樣把它們帶著。
正在讀取 {name}… {name} 不是 GIF:{why}。這個工具讀的是 GIF 格式本身,所以對別的檔案無話可說。 {name} 讀不了:{why} 檔案在 {available} 位元組處就結束了,而 {at} 處還需要 {wanted} 位元組 這個檔案的開頭不是「GIF」,而是 {what} 一個 JPEG 一個 PNG 一個 RIFF 檔案 — WebP 或者 WAV 一個 PDF 一個 zip 檔案 位元組 {bytes} 碼長是 {size},而格式允許的是 2 到 8 {n} 幀 {n} 幀 {n} 種顏色 {n} 種顏色 {n} 項 {n} 項 {n} 張逐幀色表 {n} 張逐幀色表 {n} 次 {n} 次 {n} 位元組 {minutes} 分 {seconds} 秒 {n} 秒 {time}({fps} fps) 有 {n} 幀要求短於 0.02 秒,而所有瀏覽器都改成按 0.10 秒停留。 一次——沒有循環塊 一直循環 {n} 次 問題 值得知道 備註 {frames}。其中 {drawn} 幀在這裡畫了出來;其餘的太大,沒法一次全放進記憶體,只能從各自的頭部來說明。 {frames},沒有一幀鋪滿整張畫布。 {frames},全都鋪滿整張畫布。 {frames},其中 {n} 幀鋪滿整張畫布。 顯示其餘 {frames} 第 {n} 幀自己存下來的東西 第 {n} 幀之後的畫布 第 {n} 幀 未繪製 延時 {delay} → 0.10 秒 矩形 {width} × {height},位於 {left}, {top} 調色盤 內建 {n} 全域性那張 一張都沒有 透明 索引 {n} 無 大小 {size} — {share} 隔行 是 壓縮比 {ratio}× 毛病 資料提前結束了 這個檔案裡的色表一共宣告瞭 {declared},畫素用到其中 {referenced},而這裡面彼此不同的有 {different}。 {entries},{size},由 {frames} 共用。變淡的項是從來沒有畫素用到的那些。 {tables}(共 {size}) 第 {n} 幀 — {colours} {n} 張裡只顯示了前 24 張。其餘的在可下載的報告裡。 一段註釋。沒有哪個看圖程式會顯示它,而檔案的每一份副本都帶著它。 循環塊,說要一直播下去。它不是 GIF 規範的一部分:網景 1995 年造了出來,結果所有人還是都實現了。 循環塊,說要播 {times}。 一個 XMP 資料包:影像編輯器寫來記錄自己做過什麼的 XML。沒有任何東西會把它畫出來。 一份 ICC 色彩配置,說明調色盤裡的數字作為顏色是什麼意思。幾乎沒有什麼會從 GIF 裡把它讀出來。 一個純文字塊,要求看圖程式在畫面上寫字。它在 1989 年的規範裡,而從來沒有任何東西實現過。 一個應用塊。看圖程式會跳過自己不認識的那些。 時長 按檔案寫的是 {time} 實際播放 {time} - 低於 0.02 秒的 {n} 幀會被所有瀏覽器抬到 0.10 秒 幀率 每秒 {fps} 幀 循環 沒有循環塊 - 只播一次 全域性調色盤 {n} 種顏色 沒有 實際用到的顏色 背景索引 已複製。它是純文字,而且只去了你的剪貼簿。 這個瀏覽器不讓頁面寫入剪貼簿。那就用「下載」吧。 檔案頭和螢幕描述符 簽名、畫布尺寸和那幾個標誌位。十三個位元組,每一個 GIF 都有。 全域性顏色表 {colours} 種顏色,每種三個位元組,凡是不內建顏色表的幀都共用它。 這個檔案沒有:每一幀都內建調色盤。 各幀自己的顏色表 給需要別的顏色的那一幀單獨準備的調色盤。每種顏色三個位元組,每次都要。 幀的時序塊 每幀八個位元組:停留多久、怎麼收拾殘局,以及哪種顏色是透明的。 幀描述符 每幀十一個位元組:這塊矩形擺在哪裡、有多大,還有壓縮器起手的碼長。 壓縮後的畫素 畫面本身,用 LZW 壓過。一個正常的 GIF,這部分差不多就是整個檔案。 分塊開銷 每 255 個位元組的資料配一個長度位元組,每一串末尾再加一個零。躲不掉,也值得看一眼。 註釋和後設資料 循環塊、註釋、顏色配置檔案,還有編輯軟體留下的各種 XMP。 結束標記 一個位元組,說明檔案到此為止。 結束之後的位元組 躺在結束標記後面的資料。沒有解碼器會讀它,純粹是分量。 對不上帳的 在這個讀取器停下來的那些塊裡的位元組。檔案如果斷在塊中間,就會剩下一些。 重複計算的 這些塊互相重疊,也就是說這個檔案對它們從哪裡開始,自己跟自己都對不上。 未指定 原樣留著 清回背景色 還原它下面原來的東西 保留值({n}) 收尾方式 GIF 分析——{name} 由 abox.tools/gif-analyzer/ 完全在瀏覽器裡讀取。檔案沒有上傳。 這個檔案 版本 畫布 {width} x {height} 畫素 大小 {rounded}({exact}) 幀數 位元組都去哪裡了 合計 值得注意的地方 各幀 檔案裡帶著的文字 全域性調色盤 內建 {colours} 色 共用 整幅畫布 序號 位置 尺寸 停留 收尾方式 調色盤 位元組 檔案到末尾都沒有結束位元組,所以它是不完整的——要麼是下載中斷,要麼是檔案被截斷了。 第 {at} 個位元組是 0x{marker},而這個格式裡沒有任何塊是這樣開頭的。它之後的一切都被忽略了。 在 {first} 和 {second} 處連著兩個圖形控制塊。第一個不描述任何影像,什麼也不做。 檔案在一個從 {at} 開始的塊中間就結束了。{detail}。 字典裡還什麼都沒有,編碼 {code} 就先來了。檢視器會畫出能畫的部分,矩形的其餘地方留空。 編碼 {code} 指向字典裡的第 {code} 項,可字典裡只有 {entries} 項。檢視器會畫出能畫的部分,矩形的其餘地方留空。 這個檔案裡沒有幀。 檔案頭能讀出來,但後面沒有跟著影像塊。不管這是什麼,任何檢視器都畫不出東西來。 這個檔案結束得不乾淨。 檔案結束之後還堆著 {bytes}。 所有解碼器都在結束位元組處停下,所以這些內容永遠不會被讀到,也永遠不會被畫出來。它們通常是接在第一個檔案後面的第二個檔案,或者是某個程式寫過了頭。在結束位元組處把檔案截斷,什麼也不會丟。 有 1 幀要求停留不到 0.02 秒,而沒有哪個瀏覽器會照辦。 有 {count} 幀要求停留不到 0.02 秒,而沒有哪個瀏覽器會照辦。 自 Netscape 起,所有瀏覽器都會把不足百分之二秒的延遲向上取到十——這條規矩寫於 1996 年,是為當年那些旋轉的地球儀定的,之後再沒被取消。所以這個動畫說自己有 {nominal},實際卻要放 {real},大約慢了 {factor} 倍。把 0.01 寫成 0.02,它就能得到自己要的速度。 每一幀的延遲都是零。 檔案完全沒有給出時間,所以放多快全看檢視器——通常是每秒十幀,但沒有任何東西保證這一點。兩個瀏覽器可以用兩種速度播放它,而且都算對。 各幀的節奏並不均勻:從 {shortest} 到 {longest},一共 {delays} 種不同的延遲。 最後一幀停得久一些是有意為之,也很常見。中間散落著各種延遲,通常是某個轉換器從影片裡丟掉了一些幀,又把相鄰的幀拉長去補這個空。 沒有循環塊,所以這個只播一次就停。 循環並不屬於 GIF 規範。它是 Netscape 在 1995 年發明、而大家照做的一個塊;沒有它的檔案,在任何瀏覽器裡都只會顯示一次。如果本意是要迴圈的,那寫它的程式把這個塊漏掉了。 這個播一次就停。 這個播 {count} 次就停。 循環塊寫的是一個次數,而不是通常的零——零表示一直循環。有些舊檢視器會忽略這個次數,照樣無限循環。 每一幀都重畫了整塊畫布。 GIF 允許一幀只存下相對上一幀變化了的那個矩形,所以錄一個幾乎不動的視窗,檔案可以很小。這裡沒有一幀這麼做:每一幀都是整塊畫布,{width}×{height}。如果這些幀本來就是互不相干的圖片,那是對的;可要是拍攝或錄製來的東西——畫面大部分在幀與幀之間根本不動——那就是白扔的體積。 {total} 幀裡有 1 幀重畫了整塊畫布,其餘的只存變化的部分。 {total} 幀裡有 {count} 幀重畫了整塊畫布,其餘的只存變化的部分。 最佳化過的 GIF 就是這個樣子。整塊畫布的那幾幀,通常是第一幀,以及畫面整個換掉的地方。 沒有哪一幀重畫整塊畫布。 第一幀之後的每一幀都只存變化了的矩形,這才是把這個格式用對了,也正是這個檔案能這麼小的原因。 有 1 幀越出了畫布。 有 {count} 幀越出了畫布。 畫布是 {width}×{height},而有一幀聲稱的矩形跑出了邊界。解碼器對超出的部分處理並不一致:有的裁掉,有的乾脆拒收這個檔案。 畫布是 {width}×{height},而有幾幀聲稱的矩形跑出了邊界。解碼器對超出的部分處理並不一致:有的裁掉,有的乾脆拒收這個檔案。 有 1 幀內建一份顏色表,代價是 {bytes} — 佔檔案的 {share}。 有 {count} 幀各內建著一份顏色表,代價是 {bytes} — 佔檔案的 {share}。 內建調色盤能讓一幀用上共享表裡沒有的顏色,代價是每寫一次、每個條目三個位元組。如果這些幀本來就是同一個場景,全部共用一份表既更小,看著也更穩:調色盤在幀與幀之間來回跳,正是所謂的 GIF 閃爍。 沒有全域性顏色表。 這沒什麼不對——這裡每一幀都內建一份——但這意味著在第一幀到達之前,檢視器沒有任何東西可以用來鋪滿畫布。 顏色表裡有 {entries} 個條目從來沒用上,加起來就是 {bytes}。 這個檔案裡的表宣告瞭 {declared} 種顏色,而畫素只用到其中 {referenced} 種。不管裡面裝了什麼,顏色表的長度總是二的冪,所以只用九種顏色的一幀照樣會拿到十六個位置;一定程度的向上取整無法避免。遠超過這個數,就說明這些調色盤是為另一幅畫準備的,而不是最後落在幀裡的這一幅。 整段動畫只用一種顏色作畫。 整段動畫用 {count} 種顏色作畫。 這是平塗的畫,正是 GIF 當初設計要裝的東西。這樣的檔案壓縮得好,抖動卻處理得差,所以如果看起來發麻點,該關掉的是抖動。 一張照片,或者從照片來的東西。GIF 一幀最多給 256 種顏色,所以凡是帶漸變的都在被近似——抖動,以及把檔案撐大的雜訊,就是從這裡來的。 這個檔案裡有一個 {bytes} 的註釋塊。 註釋沒有哪個檢視器會顯示,可檔案的每一份副本都帶著它。它通常是寫出這個檔案的程式名,偶爾也會是作者本來不會選擇公開的東西。 一個 XMP 後設資料包占了 {bytes} — 檔案的 {share}。 XMP 是影像編輯軟體用來記錄自己做過什麼的 XML 塊,可能裝著編輯歷史、軟體名,有時還有作者。沒有哪個檢視器會把它畫出來。刪掉它,畫面什麼也不會少。 一個 ICC 顏色配置檔案佔了 {bytes}。 這份配置說明調色盤裡的數字作為顏色是什麼意思。幾乎沒有什麼東西會從 GIF 裡讀它,所以它多半是白佔的分量——不過在會讀它的檢視器裡,刪掉可能會讓顏色偏一點。 這個檔案裡有一個純文字擴充區塊。 這個塊要求檢視器在畫面之上、按單元格網格畫出文字。它寫在 1989 年的規範裡,從來沒有被任何東西實現,每個解碼器都跳過它。裡面寫了什麼都不會顯示出來。 有一個名為“{name}”的應用塊,大小 {bytes}。 應用塊是規範之外的東西進入 GIF 的通道。檢視器會跳過自己不認識的那些,所以除非有某個特定的程式在讀它,它就只是分量。 有 1 幀是隔行儲存的。 有 {count} 幀是隔行儲存的。 行分四遍存放,好讓從慢速線路傳來的圖片早早顯出一個粗略的樣子。這在 1993 年是有道理的,它比按順序存行壓縮得略差,而今天沒有哪個檢視器還能從中得益。 這個檔案說自己是 GIF{version},而不是 GIF89a。 GIF87a 出現得更早,沒有時間塊、沒有透明、也沒有循環塊。一個檔案明明帶著其中某樣東西卻自稱 87a,這很常見——解碼器並不會去核對——但這說明檔案頭是抄來的,不是寫出來的。 背景色是第 {index} 號,而全域性表裡只有 {entries} 個條目。 不會有什麼崩潰——檢視器會改用透明——但這說明這個欄位要麼從來沒設過,要麼是照著另一份、如今已不在檔案裡的調色盤設的。 畫素長寬比被設成了 {ratio}。 這是給那些畫素不是正方形的顯示裝置用的欄位。今天的檢視器一律忽略它,按存下來的尺寸畫這一幀,所以依賴它的檔案,在做的人眼裡是被拉長的,在別人眼裡則完全正常。 壓縮器把字典重置了 {count} 次。 LZW 邊走邊建字典,最多裝 4096 項;裝滿了,編碼器就從頭再來。每幀一次是正常的——一幀本來就是這麼開始的。多於這個數,說明畫面變化多到中途就把字典用盡了,而照片或者重抖動正會這樣,那類檔案之所以大也正因為如此。 有 1 幀和它前面那幀一模一樣。 有 {count} 幀和各自前面那幀一模一樣。 它們要付出完整的壓縮體積,螢幕上卻什麼也沒變。把它們的延遲併到前一幀上,看起來完全一樣,體積還更小。 有 1 幀沒能完整解碼。 有 {count} 幀沒能完整解碼。 這一幀還沒填滿,壓縮資料就結束了。檢視器會畫出能畫的部分,矩形的其餘地方留空。 你的 GIF 沒有去任何地方。載入了 {total} 個檔案。{platform} 有東西聯絡了 {hosts},而這個工具從不這麼做。{platform} 本站自己用於廣告、統計和捐贈按鈕的指令碼來自 {hosts} 個主機,它們誰也沒拿到任何檔案。 本站自己用於廣告、統計和捐贈按鈕的指令碼來自 {hosts} 個主機,它們誰也沒拿到任何檔案。