资讯动态

调色板:让图像变小的隐藏神器

发布时间:2026/10/15 3:30:52 来源:尧图企业网站定制
一、一句话理解调色板是一张颜色表。图像里的每个像素不直接存颜色只存一个编号索引真正的颜色要拿编号去调色板里查。可以类比按编号涂色的填色画画上只写着 1、2、3……旁边有一张对照表写着1 红2 绿3 蓝。这种图像叫索引色图像Indexed ColorPNG 中对应颜色类型 3。二、具体内容1. 调色板本身调色板是一个数组每一项是一种颜色索引 R G B ──────────────────────── 0 255 0 0 红 1 0 255 0 绿 2 0 0 255 蓝 3 255 255 255 白 ... 255 ... ... ... 最多 256 项在 PNG 中调色板存放在PLTE 块里每项 3 字节R、G、B最多 256 项所以块长度最大为 768 字节。透明度单独存放在tRNS 块里按顺序给每一项提供一个 Alpha 值。tRNS 可以比调色板短没写到的项默认 Alpha 255不透明。2. 像素数据像素数据里每个像素只是一个索引值像素数据4×2 的小图 0 0 1 1 2 2 3 3 查表后的实际颜色 红 红 绿 绿 蓝 蓝 白 白索引的位数决定了调色板最多能用多少项位深每像素占用最多颜色数1 位1/8 字节22 位1/4 字节44 位1/2 字节168 位1 字节256这也是 PNG 规定调色板图不能是 16 位的原因16 位索引意味着 65536 项调色板已经失去意义。三、作用1. 节省空间最主要的作用以一张 1000×1000 的图为例存储方式像素数据大小RGB 真彩色每像素 3 字节约 3 MBRGBA每像素 4 字节约 4 MB8 位调色板每像素 1 字节 768 字节调色板约 1 MB4 位调色板16 色约 0.5 MB数据量少了再经过 Deflate 压缩后文件也更小。2. 适合颜色少的图像图标、Logo、像素画、简单的界面图、图表等本来就只有几种到几十种颜色用调色板几乎没有损失。照片就不合适照片可能有几十万种颜色压缩到 256 色必然失真出现色带、需要抖动。3. 历史原因显卡硬件早期显卡如 VGA 的 256 色模式显存很小硬件本身就按索引 调色板工作。改调色板就能让整个画面变色老游戏常用这个技巧做调色板动画比如水流、闪烁效果不用改任何像素。GIF、BMP、PCX 等老格式都保留了调色板设计。四、stb_image 怎么处理调色板stb 的原则是输出永远是直接的颜色值不把调色板交给用户。文件中 PLTE颜色表 tRNS可选的 Alpha 像素索引 ↓ stbi__expand_png_palette 输出 每个像素直接是 RGB 或 RGBA具体过程对应上一篇 PNG 第四、八节读 PLTE存进palette[1024]即 256 项 × 4 字节RGBAAlpha 先填 255。读 tRNS把 Alpha 填进对应项并把输出通道数从 3 改成 4。反滤波此时每像素只有 1 个通道就是索引。低位深时不做 0~255 的放大因为索引必须保持原值。展开逐像素查表for(i0;ipixel_count;i){intnorig[i]*4;// 索引 × 4 该颜色在表中的位置p[0]palette[n];// Rp[1]palette[n1];// Gp[2]palette[n2];// Bif(pal_img_n4)p[3]palette[n3];// Appal_img_n;}所以对使用者来说调色板 PNG 加载后comp报告的是3无 tRNS或4有 tRNS而不是 1拿不到原始索引和调色板。如果确实需要索引例如做像素画编辑器、要改调色板stb_image 做不到需要用 libpng 或 lodepng 等库。五、其他格式里的调色板格式调色板情况PNGPLTE 块RGB透明度放在 tRNS 块GIF必须使用调色板最多 256 色有全局调色板每帧也可以有局部调色板透明用一个透明索引表示BMP1/4/8 位图在文件头后跟调色板每项 4 字节顺序是B、G、R、保留TGA可选的颜色映射表Color Map项可以是 15/16/24/32 位PSD、JPEGJPEG 不支持调色板stb 的 PSD 解码只处理 RGB 等直接颜色模式stb 对这些格式都是一样的做法解码时查表展开输出直接的颜色值。六、总结问题答案调色板是什么一张颜色表像素存索引用索引查表得到颜色内容是什么最多 256 项 RGB 颜色PNG 的 PLTE可选配每项的 AlphatRNS有什么作用节省存储空间适合颜色少的图早期硬件的工作方式缺点最多 256 色不适合照片stb 怎么处理解码时展开成 RGB/RGBA用户拿到的是直接颜色拿不到索引

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑