【图像处理】-不同的图像存储格式

devtools/2025/2/8 18:52:04/

看到了前面的基础操作介绍,我们再了解一下不同图像的存储格式,更有利于我们理解图像处理的原理。

图像存储格式详细介绍

1. BMP(BitMap Picture)

发展历史

BMP是一种位图文件格式,由微软公司于1986年推出。它最初是为Windows操作系统设计的,后来逐渐被其他操作系统所支持。由于其简单易用的特点,在早期计算机图形学中得到了广泛应用。

描述

BMP是一种与设备无关的位图格式,这意味着无论何种显示设备都可以正确地渲染该图像。BMP文件由四个部分组成:文件头、位图信息头、颜色表(可选)和位图数据。其中,文件头用于描述文件的基本信息;位图信息头则包含了关于图像尺寸、色彩深度等详细信息;颜色表定义了图像中使用的颜色;而位图数据则是实际的像素值。

存储结构示例
字段名称长度(字节)描述
文件类型2标识文件为BMP格式 (BM)
文件大小4整个文件的大小
保留值4保留未使用
数据偏移量4从文件开头到图像数据之间的字节数
大小4本信息头的长度
宽度4图像宽度,以像素为单位
高度4图像高度,以像素为单位
色彩平面数2总是设置为1
位数/像素2每个像素占用的位数
压缩方式4表示是否压缩及采用何种压缩算法
图像大小4压缩后的图像数据大小
水平分辨率4每米的像素数
垂直分辨率4每米的像素数
使用的颜色数4颜色表中颜色的数量
重要颜色数4对图像显示至关重要的颜色数量
实际图片数据说明

假设我们有一张10x10像素的单色(黑白)BMP图像,每个像素占1位,总共有100个像素点。文件结构如下:

  • 文件头:

    • 文件类型: BM (2字节)
    • 文件大小: 54 + 100 = 154字节 (4字节)
    • 保留值: 0 (4字节)
    • 数据偏移量: 54字节 (4字节)
  • 位图信息头:

    • 大小: 40字节 (4字节)
    • 宽度: 10像素 (4字节)
    • 高度: 10像素 (4字节)
    • 色彩平面数: 1 (2字节)
    • 位数/像素: 1位 (2字节)
    • 压缩方式: 0 (无压缩) (4字节)
    • 图像大小: 100字节 (4字节)
    • 水平分辨率: 2835 DPI (4字节)
    • 垂直分辨率: 2835 DPI (4字节)
    • 使用的颜色数: 2 (4字节)
    • 重要颜色数: 0 (4字节)
  • 颜色表:

    • 黑色: RGB(0, 0, 0) (4字节)
    • 白色: RGB(255, 255, 255) (4字节)
  • 位图数据:

    • 按行排列的100个像素点,每个像素点占1位,共13字节(因为每8个像素点需要1字节存储)

2. JPEG(Joint Photographic Experts Group)

发展历史

JPEG是由联合图像专家组在1992年制定的一种有损压缩标准,旨在解决数字照片和其他连续色调图像所需的大量存储空间问题。JPEG格式因其高效的压缩比和良好的视觉质量而在互联网上广泛传播。

描述

JPEG采用了基于离散余弦变换(DCT)的压缩技术,可以显著减少文件体积而不明显影响画质。JPEG文件由一系列标记段组成,每个标记段包含一个两字节的标识符、两个字节表示内容长度以及具体的数据。

存储结构示例
标记段长度(字节)描述
SOI (Start of Image)2文件开始标志 (FF D8)
APP0 (JPEG应用段0)16应用程序特定信息
DQT (定义量化表)67量化表参数
SOF0 (开始帧0)17帧头部信息
DHT (定义哈夫曼表)328哈夫曼编码表
SOS (开始扫描)12 + 图像数据 + EOI (End of Image, 2字节)扫描开始及结束标志 (FF DA, FF D9)
实际图片数据说明

假设我们有一个简单的JPEG图像,包含以下标记段:

  • SOI: FF D8
  • APP0: 包含JFIF头信息
  • DQT: 定义量化表
  • SOF0: 帧头部信息,例如:
    • 图像宽度: 640像素
    • 图像高度: 480像素
    • 精度: 8位
  • DHT: 定义哈夫曼编码表
  • SOS: 开始扫描,后跟压缩后的图像数据
  • EOI: 文件结束标志 FF D9

3. PNG(Portable Network Graphics)

发展历史

PNG格式是在1995年由一群开发者创建,作为GIF格式的替代品。PNG不仅支持透明背景,还提供了更好的压缩效果,并且是完全无损的。随着Web技术的发展,PNG成为了网页设计师们最喜爱的图像格式之一。

描述

PNG是一种无损压缩的位图格式,具有跨平台兼容性。PNG文件由一个固定的签名序列后跟多个块构成。每个块都有自己的类型代码、长度字段和校验和,确保数据完整性。

存储结构示例
长度(字节)描述
文件签名8确认文件为PNG格式 (89 50 4E 47 0D 0A 1A 0A)
IHDR (Image Header)17图像基本信息如宽度、高度等
PLTE (Palette)至少3n+1调色板中的颜色条目
IDAT (Image Data)至少12实际图像数据
IEND (Image Trailer)12文件结束标志
实际图片数据说明

假设我们有一个简单的PNG图像,包含以下块:

  • 文件签名: 89 50 4E 47 0D 0A 1A 0A
  • IHDR: 包含图像宽度、高度、位深度等信息
    • 宽度: 640像素
    • 高度: 480像素
    • 位深度: 8位
    • 颜色类型: 真彩色带Alpha通道
  • PLTE: 如果是调色板图像,则包含调色板条目
  • IDAT: 压缩后的图像数据
  • IEND: 文件结束标志

4. GIF(Graphics Interchange Format)

发展历史

GIF最早出现在1987年,由CompuServe公司开发。最初版本被称为GIF87a,随后在1989年进行了改进,推出了GIF89a版本,增加了对动画和透明度的支持。尽管存在版权争议,但GIF仍然非常流行,特别是在社交媒体平台上分享简短动画时。

描述

GIF使用LZW压缩算法进行无损压缩,适合存储具有较少颜色变化的简单图形或小型动画。GIF文件结构相对简单,主要包括文件头、逻辑屏幕描述符、全局颜色表(如果有的话)、图像描述符、局部颜色表(如果有的话)以及图像数据。

存储结构示例
字段名称长度(字节)描述
文件头6“GIF87a” 或 “GIF89a”
逻辑屏幕描述符7包含屏幕宽度、高度等信息
全局颜色表3nRGB三元组组成的调色板
图像描述符10指定图像位置和尺寸
局部颜色表3m如果存在,则覆盖全局颜色表
图像数据变长LZW压缩后的像素流
实际图片数据说明

假设我们有一个简单的GIF图像,包含以下字段:

  • 文件头: GIF89a
  • 逻辑屏幕描述符:
    • 宽度: 100像素
    • 高度: 100像素
    • 调色板大小: 256色
  • 全局颜色表: 包含256个RGB三元组
  • 图像描述符:
    • 左位置: 0
    • 上位置: 0
    • 宽度: 100像素
    • 高度: 100像素
  • 图像数据: LZW压缩后的像素流

http://www.ppmy.cn/devtools/157153.html

相关文章

用deepseek制作我的第一个长视频---使用AI解决尝试新领域没有经验拖延的问题!

(由于技术原因,联网搜索暂不可用) 制作一个高质量的Vlog或生活记录长视频,即使零基础也能通过系统规划实现!以下是为你定制的「从零到成品」全流程指南,结合叙事逻辑、剪辑技巧和效率工具,帮你…

快速优雅解决webview_flutter不能Safari调试的问题

这个问题,网上一搜,又是让你去检索WKWebView,找到FWFWebViewHostApi.m文件,然后再改 iOS 的代码, 加一行 self.inspectable YES; 我们开发Flutter项目,尽量还是不要去改插件里的代码,好了不费…

朝天椒USB服务器在湖南电力的应用案例

湖南电力作为能源行业的领军企业,在日常运营中需要处理大量的财务和资金交易。随着业务的不断增长,银企直连成为其提高资金流转效率和安全性的重要手段。然而,在银企直连场景中,银行U盾的网络连接问题一直是困扰企业的技术难题。为…

【数据结构】循环链表

循环链表 单链表局限性单向循环链表判断链表是否有环思路code 找到链表入口思路代码结构与逻辑 code 单链表局限性 单链表作为一种基本的数据结构,虽然在很多场景下都非常有用,但它也存在一些局限性: 单向访问:由于每个节点仅包含…

高端入门:Ollama 本地高效部署DeepSeek模型深度搜索解决方案

目录 一、Ollama 介绍 二、Ollama下载 2.1 官网下载 2.2 GitHub下载 三、模型库 四、Ollmal 使用 4.1 模型运行(下载) 4.2 模型提问 五、Ollama 常用命令 相关推荐 一、Ollama 介绍 Ollama是一个专为在本地机器上便捷部署和运行大型语言模型&…

【STM32】蓝牙模块数据包解析

使用到的蓝牙模块为DX-BT24,他可以将串口转蓝牙,实现与手机蓝牙的通信,本次实现使用手机蓝牙发送数据包来控制单片机LED的亮灭,规则如下: AA 05 01 FF AF 该数据包表示包头为AA,05表示该数据包的大小&#…

3步打造C# API安全密盾

引言:API 安全的重要性 在数字化浪潮中,应用程序编程接口(API)已成为不同软件系统之间通信和数据交互的关键桥梁。无论是企业内部的微服务架构,还是面向外部用户的在线服务,API 都承担着数据传输和业务逻辑…

unity学习31:Video Player 视频播放相关基础

目录 1 新增Video Player的 component 2 导入视频到Asset里 3 拖入到 video player的 video clip里去即可 4 渲染模式 4.1 多种渲染模式 4.2 如果选择 Render Texture模式 4.3 然后把Render Texture 拖到游戏里的 gameObject上面 5 在UI上显示 5.1 创建UI 5.2 在UI上…