当前位置: 首页 > news >正文

常见图片压缩原理

概览

  • GIF:调色板(索引色)+ LZW 无损压缩,适合颜色有限的图像、动画。
  • PNG:逐行滤波 + DEFLATE(LZ77 + Huffman)无损压缩,支持真彩色和透明。
  • JPEG:基于离散余弦变换(DCT)的有损压缩,适合照片类复杂渐变图像。

GIF(Graphics Interchange Format)

原理与流程:

  1. 调色板(Palette / Indexed Color):图像色彩被映射到最多 256 色的全局或局部调色板,像素只存储索引(8 bit)。
  2. LZW 压缩:对索引流应用 LZW(字典式)无损压缩,替换常见序列以减少数据量。
  3. 可选的逐帧动画和简单的透明控制;支持“交错”(interlace,4-pass)以便渐进显示。
  4. GIF压缩

优缺点:

  • 优点:无损(在 256 色限制内),支持动画,文件头/解码简单。
  • 缺点:颜色受限(256 色),对照片类图像效果差;LZW 对高色彩图像压缩有限。

适用场景:图标、线条图、色彩简单的动画或带透明背景的小图。


PNG(Portable Network Graphics)

原理与流程:

  1. 色彩表示:支持调色板(索引色)、真彩色(24/48-bit)、带/不带 Alpha 通道。
  2. 逐行滤波(Filter):对每一行像素先应用一种预测滤波器(5 类:None、Sub、Up、Average、Paeth),把像素值转为更易压缩的残差数据。
  3. DEFLATE 压缩:对滤波后的数据使用 DEFLATE(LZ77 + Huffman)无损压缩。
  4. 可选 Adam7 交错(7-pass)用于渐进加载。
  5. PNG压缩

优缺点:

  • 优点:无损、支持真彩与透明,压缩比对图像(尤其带大色块或文本)优秀;支持校验(CRC)。
  • 缺点:对照片类复杂纹理相比 JPEG 文件更大;编码/滤波选择影响压缩效果和速度。

适用场景:需要无损保存、透明背景、图形、UI 元素、带文字或线条的图片。


JPEG(Joint Photographic Experts Group)

原理与流程(Baseline JPEG 常见流程):

  1. 色彩空间转换:从 RGB 转为 YCbCr,分离亮度(Y)和色度(Cb/Cr)。
  2. 色度下采样(Chroma subsampling):常见 4:2:0 或 4:2:2,对 Cb/Cr 进行降采样以利用人眼对色度不敏感的特性。
  3. 分块与 DCT:将图像按 8×8 像素块分割,对每块做二维离散余弦变换(DCT),变换到频域。
  4. 量化(Quantization):用量化矩阵对 DCT 系数打小数(除以量化值并四舍五入),这是主要的有损步骤,量化强度决定压缩率与失真程度。
  5. 顺序编码:按锯齿(zig-zag)顺序把系数变成一维序列,长零序列 -> RLE(游程编码)。
  6. 熵编码:对符号使用霍夫曼编码或算术编码(不同实现)进一步压缩。
  7. 可选:Progressive JPEG(多次扫描逐步提高图像细节)。
  8. JPG压缩

优缺点:

  • 优点:对照片类图像压缩比高、视觉质量可控(通过量化表);广泛支持。
  • 缺点:有损,压缩会引入阻塞效应、伪影;对高对比边缘和文字不友好;不支持透明。

适用场景:照片、复杂渐变背景、大尺寸图片用于网络传输。


常见对比与选用建议

  • 需要无损且带透明:PNG(真彩 + alpha);若颜色非常少且需动画,考虑 GIF 或 APNG(更现代)。
  • 需要动画且色彩有限:GIF(体积小但颜色受限);现代替代有 WebP/AVIF 动画。
  • 照片与自然图像:JPEG(或更现代的 WebP/AVIF)用于更小体积与可接受的视觉损失。
  • 需要最优无损压缩(调色板图片):PNG 的滤波+DEFLATE 通常优于 GIF(当色彩>256 时 GIF 不适用)。

结语:三者的核心差别在于是否有损、预处理方法(色彩空间/滤波/调色板)与所用的编码算法(LZW / DEFLATE / DCT+量化+熵编码)。选择时以图像内容和对质量、透明性、动画支持与体积的权衡为准。

http://www.jsqmd.com/news/119623/

相关文章:

  • Introducing Qwen-Image-Layered: A Free AI Photoshop Alternative for Image Layer Editing
  • 手机自动化测试如何选型?Open-AutoGLM与Selenium适配差异大揭秘,看完少走3年弯路
  • rust trait 是否可以作为函数返回值?
  • MQ快速入门
  • 剖析CVE-2024-58318:Kentico Xperience存储型XSS漏洞技术详解
  • ZR2025 dp
  • QOJ7980 区间切割
  • 学术探索新伙伴:解锁书匠策AI科研工具中的本科硕士论文写作“宝藏功能”
  • Rust 的 trait 多态机制
  • 错过将落后一年,Open-AutoGLM邮件自动化正在重塑企业沟通模式
  • 【移动端自动化适配避坑指南】:Open-AutoGLM与Selenium的5大核心差异及应用场景分析
  • CH32V203进入USB下载模式为什么不跟CH552一致
  • 2025年市场专业的高效粉碎机订做厂家选哪家,JGF-B系列高效粉碎机 /JGF-C系列高效粉碎机厂家口碑推荐 - 品牌推荐师
  • AI原生应用领域多租户系统的测试与部署要点
  • Zabbix企业级监控从零搭建到自动化告警
  • 【专家视角】Open-AutoGLM与Power Automate如何抉择?3年实战总结的7条铁律
  • Node.js流式处理结合WebAssembly SIMD加速图像滤镜后来才知道需手动对齐内存对齐
  • CSS 样式的继承
  • 985本硕进不去大厂,是不是很丢人?
  • 揭秘Open-AutoGLM与Power Automate适配差异:3个关键维度决定选型成败
  • 【RPA工具选型避坑指南】:Open-AutoGLM与UiPath操作成本真实对比
  • SpringCloud Gateway 集成 Sentinel 详解 及达成动态监听Nacos规则配备实时更新流控规则
  • 从零开始学昇腾Ascend C算子开发-第三篇:算子开发基础
  • 仅限前100名获取:Open-AutoGLM销售线索评分模型内部配置参数模板
  • 【Java毕设全套源码+文档】基于springboot的大学生兼职平台设计与实现(丰富项目+远程调试+讲解+定制)
  • Open-AutoGLM报价自动化落地实践(90%企业忽略的关键细节)
  • 详细介绍:Linux网络TCP(中)(12)
  • 【急急急】上海进出口权办理流程需要哪些材料?多长时间?多少费用? - 速递信息
  • 从零开始学昇腾Ascend C算子开发-第四篇:常用算子实现
  • Open-AutoGLM自动保存性能优化指南(仅限高级用户访问)