GIF圖像格式

你可能已經知道,GIF 是一種光柵圖像文件格式,它在不損失圖像質量的前提下提供壓縮功能,并且支持動畫和透明度。
GIF 是“Graphics Interchange Format(圖形交換格式)”的縮寫。由于其良好的兼容性以及在不同應用程序和操作系統之間的可移植性,這種格式變得非常流行。下面我們將深入了解 GIF 為什么如此通用,以及它的文件結構。同時,我們還會看看它的優點與缺點。


GIF 的結構

目前,GIF 文件有兩個版本:87a 和 89a。前者是最初的 GIF 格式,而后者是更新版本。GIF89a 添加了一些新功能,如動畫延遲、透明背景顏色、元數據存儲等。

GIF 文件的簡化結構由文件開頭的固定區域組成,緊隨其后的是若干個可變數量的數據塊。固定區域包括三個部分:

  • 頭部(Header):標明 GIF 的版本。

  • 全局屏幕描述符(Global Screen Descriptor):指定圖像的尺寸。

  • 全局顏色表(Global Color Table):定義圖像中使用的顏色。

文件以圖像結束符(Trailer)結束。

GIF 文件結構

圖像塊(Image Block)中包含了壓縮的圖像數據等信息。GIF 以最多 8 位的像素編碼,并使用 RGB 顏色模型和調色板。像素數據通過一種稱為 LZW 的壓縮算法進行壓縮。GIF 的廣泛使用在很大程度上得益于該算法。即使在過去網速較慢的年代,LZW 也能讓大圖像快速加載。


LZW 壓縮算法

Lempel-Ziv-Welch(LZW)算法 由 Abraham Lempel 和 Jacob Ziv 提出,后由 Terry Welch 改進。這是一種無損壓縮算法,意味著壓縮過程中不會丟失任何信息。

它是一種基于字典的壓縮方法,即在原始數據中使用一個“字典”來記錄重復出現的序列。字典中的序列越長、重復越頻繁,壓縮效果就越好。

LZW 的核心思想是利用數據中的重復模式。算法在編碼和解碼過程中動態地構建一個字典。通常,字典中索引 0 到 255 表示單個字符,而大于 255 的索引表示編碼過程中出現的多個字符組成的序列。

LZW 壓縮的一般步驟如下:
  1. 準備一個包含所有單字符序列的初始字典。

  2. 查找當前輸入中在字典中匹配的最長序列,將其替換為字典中的索引。

  3. 將當前序列加上下一個輸入字符,作為新條目加入字典。

  4. 回到步驟 2。

:下方的動畫 GIF 展示了 LZW 編碼過程的動畫演示。

解碼過程也很相似。它從壓縮的數據流中提取索引,并重新構建出同樣的字典。因此,不需要單獨傳輸字典,節省了寶貴的空間。


使用 GIF 格式的優勢

你可能知道,GIF 不僅可以存儲靜態圖像,還支持動畫。如今,網絡聊天中的小動畫和表情包幾乎都使用 GIF 格式。

其次,GIF 非常適合色彩數量有限的圖像,例如徽標(logo)。在這種情況下,LZW 壓縮能夠高效保存大塊單一顏色區域和清晰邊界。

最后,是透明度。在 GIF 中,某些幀可以將特定的調色板索引設置為“透明色”,這表示在動畫中,該像素位置將使用上一個幀中相同位置的像素顏色。


GIF 的缺點

GIF 的一個主要缺點是色彩限制——每幅圖像最多只能使用 256 種顏色。與 JPEG(可顯示多達 1600 萬種顏色)相比,這樣的色彩范圍顯然捉襟見肘。雖然這種限制在 GIF 誕生時是合理的(因為當時的硬件無法顯示太多顏色),但如今已經難以滿足顯示照片或漸變圖像的需求。

另一個缺點是 GIF 沒有 alpha 通道來實現真正的透明效果。像 PNG 這類格式支持 RGBA 模式(RGB 加上 A 通道),其中 A 表示每個像素的透明度。而 GIF 只能指定一個顏色為“透明色”,并使用這種方式模擬透明區域。這在精度和表現上都不如 alpha 通道。


總結

  • GIF 文件結構:開頭包括頭部、全局屏幕描述符和全局顏色表。之后是若干圖像塊(含壓縮圖像數據),最后是文件結束符。

  • 圖像數據通過 LZW 算法 壓縮,該算法在編碼和解碼時動態構建字典,不需要額外傳輸字典數據。

  • 優勢:適用于色彩數量較少的圖像(如徽標)、支持動畫和部分透明功能。

  • 缺點:顏色數量限制為 256,且缺乏 alpha 通道支持,透明處理相對粗糙。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916440.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916440.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916440.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

D3.js的力導向圖使用入門筆記

D3.js是一個用于數據可視化的JavaScript庫,廣泛應用于Web端的數據交互式圖形展示 中文文檔:入門 | D3 中文網 一、D3.js核心特點 1、核心思想 將數據綁定到DOM元素,通過數據動態生成/修改可視化圖形。 2、應用場景 交互式圖表:如動態條…

Zookeeper的分布式事務與原子性:深入解析與實踐指南

引言在分布式系統架構中,事務管理和原子性保證一直是極具挑戰性的核心問題。作為分布式協調服務的標桿,Apache Zookeeper提供了一套獨特而強大的機制來處理分布式環境下的原子操作。本文將深入探討Zookeeper如何實現分布式事務的原子性保證,分…

Lua(迭代器)

Lua 迭代器基礎概念Lua 迭代器是一種允許遍歷集合(如數組、表)元素的機制。迭代器通常由兩個部分組成:迭代函數和狀態控制變量。每次調用迭代函數會返回集合中的下一個元素。泛型 for 循環Lua 提供了泛型 for 循環來簡化迭代器的使用。語法如…

發布 VS Code 擴展的流程:以顏色主題為例

發布 VS Code 擴展的流程:以顏色主題為例 引言:您的 VS Code 擴展在市場中的旅程 Visual Studio Code (VS Code) 的強大擴展性是其廣受歡迎的核心原因之一,它允許開發者通過添加語言支持、調試器和各種開發工具來定制和增強其集成開發環境&…

C++ 多線程(一)

C 多線程(一)1.std中的thread API 介紹開啟一個線程獲取線程信息API交換兩個線程2.向線程里傳遞參數的方法第一種方式(在創建線程的構造函數后攜帶參數)第二種方式(Lambda)第三種方式(成員函數&…

自動駕駛訓練-tub詳解

在 Donkeycar 的環境里,“tub” 是一個很關鍵的術語,它代表的是存儲訓練數據的目錄。這些數據主要來源于自動駕駛模型訓練期間收集的圖像和控制指令。 Tub 的構成 一個標準的 tub 目錄包含以下兩類文件: JSON 記錄文件:其命名格式…

CVPR多模態破題密鑰:跨模對齊,信息串供

關注gongzhonghao【CVPR頂會精選】當今數字化時代,多模態技術正迅速改變我們與信息互動的方式。多模態被定義為在特定語境中多種符號資源的共存與協同。這種技術通過整合不同模態的數據,如文本、圖像、音頻等,為用戶提供更豐富、更自然的交互…

小米路由器3G R3G 刷入Breed和OpenWrt 插入可共享網絡的usb隨身WiFi

小米 R3G 參數(以下加黑加粗需要特別關注,灰常詳細) 市面上有R3G和R3Gv2兩種型號, 注意區分, 后者是縮水版, 沒有USB口. 內存只有128M, Flash只有16M. 這里描述的只適用于R3G. 就是這樣 操作步驟開始,,注&#xff1a…

SpringBoot實現Serverless:手擼一個本地函數計算引擎

前言 最近突然冒出一個想法:能不能用SpringBoot自己實現一個類似AWS Lambda或阿里云函數計算的執行引擎? 說干就干,于是從零開始設計了一套基于SpringBoot的Serverless執行框架。 這套框架支持函數動態加載、按需執行、資源隔離,甚…

Java排序算法之<插入排序>

目錄 1、插入排序 2、流程介紹 3、java實現 4、性能介紹 前言 在 Java 中, 冒泡排序(Bubble Sort) 和 選擇排序(Selection Sort) 之后,下一個性能更好的排序算法通常是 插入排序(Insertion …

《計算機網絡》實驗報告七 HTTP協議分析與測量

目 錄 1、實驗目的 2、實驗環境 3、實驗內容 4、實驗結果與分析 4.1 使用tcpdump命令抓包 4.2 HTTP字段分析 5、實驗小結 5.1 問題與解決辦法: 5.2 心得體會: 1、實驗目的 1、了解HTTP協議及其報文結構 2、了解HTTP操作過程:TCP三次…

面試實戰,問題十三,Redis在Java項目中的作用及使用場景詳解,怎么回答

Redis在Java項目中的作用及使用場景詳解(面試要點) 一、Redis的核心作用高性能緩存層 原理:Redis基于內存操作(引用[2]),采用單線程模型避免線程切換開銷,配合IO多路復用實現高吞吐(…

Python - 100天從新手到大師 - Day6

引言 這里主要是依托于 jackfrued 倉庫 Python-100-Days 進行學習,記錄自己的學習過程和心得體會。 1 文件讀寫和異常處理 實際開發中常常會遇到對數據進行持久化的場景,所謂持久化是指將數據從無法長久保存數據的存儲介質(通常是內存&…

IP--MGER綜合實驗報告

一、實驗目的完成網絡設備(路由器 R1-R5、PC1-PC4)的 IP 地址規劃與配置,確保接口通信基礎正常。配置鏈路層協議及認證:R1 與 R5 采用 PPP 的 PAP 認證(R5 為主認證方),R2 與 R5 采用 PPP 的 CH…

window的WSL怎么一鍵重置

之前用WSL來在windows和服務器之間傳輸數據,所以有很多數據緩存,但是現在找不到他們的路徑,所以想直接重置 首先使用spacesniffer看一下C盤的情況:看起來,這個WSL真的占用了很多空間,但是我又不知道該怎么刪…

卷積神經網絡研討

卷積操作原理: 特征向量與遍歷:假設已知特征向量(如藍天白云、綠油油草地特征),在輸入圖像的各個區域進行遍歷,通過計算內積判斷該區域是否有想要的特征。 內積計算特征:內積為 0 表示兩個向量垂直,關系不好,無想要的特征;夾角越小,內積越大,代表區域中有想要的特征…

【EWARM】EWARM(IAR)的安裝過程以及GD32的IAR工程模板搭建

一、簡介 IAR官網 EWARM,即 IAR Embedded Workbench for ARM,是由 IAR Systems 開發的一款專門用于 ARM 微處理器軟件開發的集成開發環境。以下是具體介紹: 功能特性: 完整工具鏈支持:集成了高級編輯器、全面的編譯…

【工程化】淺談前端構建工具

一、前端構建工具概述? 前端構建工具是輔助開發者將源代碼轉換為瀏覽器可直接運行的靜態資源的工具集合。隨著前端技術的發展,源代碼往往包含瀏覽器無法直接解析的語法(如 TypeScript、Sass)、模塊化規范(如 ES Modules、Common…

數據取證:Elcomsoft Password Digger,解密 macOS (OS X) 鑰匙串信息

Elcomsoft Password Digger(EPD)是一款在 Windows 平臺上使用的工具,用于解密存儲在 macOS 鑰匙串中的信息。該工具可以將加密的鑰匙串內容導出到一個純文本 XML 文件中,方便查看和分析。一鍵字典構建功能可以將鑰匙串中的所有密碼…

2.JVM跨平臺原理(字節碼機制)

目錄引言一、跨平臺就跟國際語言翻譯似的二、字節碼和 JVM 到底是啥玩意兒三、解決 “語言不通” 這個老難題四、實現 “一次編寫,到處運行” 就這四步五、字節碼技術給世界帶來的大改變總結引言 咱平常是不是老納悶兒,為啥同一個 Java 程序&#xff0c…