常见文件格式特征
txt#
纯文本文件格式,即只有文本没有任何文件标识和结构,所存内容即为文件格式。与之对应的是富文本格式,由未格式化文本、控制字、控制符号等组成,能包含文本图像颜色等。
以下是在winhex中查看的一个txt格式的文档的内容
doc/docx#
是一种富文本格式。是微软的office word软件创建的文件格式。docx是在doc的基础上加入了xml,并且以一个zip压缩文件的形式存在。所以可以将docx的文件解压缩。
这就是一个docx的文档用解压软件打开后的内容
用winhex打开,其文件头是50 4B 对应ascii码为PK。这个也是zip的文件头
png#
是无损压缩的图片格式。
一个png文件由一个文件头标志和若干个数据块顺序排列构成。开始为16进制89,这个超出了ascii范围,为了防止被解析为文本文件。
每一个数据块由四个部分组成,第一个部分占四个字节数据部分长度,4个字节类型,不固定具体的数据信息,最后四个字节表示校验码
其中叫做INDR数据块的数据部分需要特别关注
其中色深(每一个像素所占的位数)表示支持的颜色种类,如04支持2^4种。
用winhex打开一个png文件
其中蓝色部分框部分为数据部分所占长度D,即13个字节。而数据部分,即棕色框确实为13个字节。
绿色框部分为类型,即该数据块为IHDR。
棕色框部分,第一条红线和第二条红线为宽度和高度,即5F 6B十进制为95 107,查看该图片的详细信息确实为95像素和107像素的。
棕色划线部分为校验和。
jpg/jpeg#
jpg和jpeg是一种格式。属于有损压缩的图片格式。有多个段组成,每个段由FF开头,之后的一个字节代表该段的类型。其中FFD8(图像起始位置)FFE0(文件详细信息)FFC0(框架起始位置)FFDA(扫描起始位置)FFD9(文件结束符)
用winhex打开一个jpg文件如下
jpeg图像压缩原理#
- 将图像分成多个 8*8的像素块。因为在8*8的像素的方格中,像素是非常相似的。
- 对每一个像素块进行离散余弦逆变换(DCT),产生了一个新的8*8的块。在每一个块中,像素点间的差异大则弦波频率高,称为高频区,差异小则弦波频率低,称为低频区。通过DCT变换后,新块中的高频系数越接近右下,低频系数越接近左上
- 然后进行量化:因为得到的新块还不能直接进行压缩。因为人对高频识别较差,所以可以去除大量高频系数,所以将新块除以一个特定的矩阵,再取整,使高频系数基本为0
- 通过熵编码等对图像进行压缩
供参考的两篇文章
https://blog.csdn.net/ljh618625/article/details/102760728
(https://www.cnblogs.com/Arvin-JIN/p/9133745.html)[https://www.cnblogs.com/Arvin-JIN/p/9133745.html]
bmp#
不采用任何其它的压缩方式,保留图像的原汁原味
由文件头、信息头、调色板、数据四部分组成
文件头占14个字节
字节数 | 意义 |
---|---|
2个字节 | 位图的类别 |
4个字节 | 位图的大小 |
4个字节 | 两个保留位 |
4个字节 | 文件头到实际的数据之间的偏移量(以小端存储) |
信息头通常40个字节
字节数 | 意义 |
---|---|
4个字节 | 文件大小 |
4字节 | 宽度 |
4字节 | 高度 |
2个字节 | 目标设备的颜色平面数 |
2个字节 | 一个像素点占几位 |
4个字节 | 压缩类型(一般为0不压缩) |
4个字节 | 图像的大小 |
4个字节 | 水平分辨率 |
4个字节 | 垂直分辨率 |
4个字节 | 位图使用调色板的实际索引数(0是使用所有索引) |
4个字节 | 对图像显示有重要影响的索引数 |
通过高度的正负(负值以补码形式表示)可以判断位图是倒向(正)还是正向(负)
gif#
无损压缩。并不存储颜色本身,而是该点的颜色对应的颜色列表的索引值。可以存储多个图像和控制图像的行为的控制块,从而实现动画效果。由文件头、gif数据流、终结器组成。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)