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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…