2 个稳定版本
1.0.1 | 2023 年 3 月 29 日 |
---|
#823 在 图像
430KB
311 代码行
PIE - 像素索引编码
版本 1.0.1
描述
这种无损图像格式仅可选地存储文件中的颜色。它设计用于与一个调色板一起使用,解码器可以从该调色板中采样颜色。
使用外部调色板可以将未压缩的图像大小减少 75%,假设是 RGBA 这样的四通道格式,或者 60%,假设是 RGB 无透明度的三通道格式。
使用内部调色板将根据调色板大小增加大小,但通常比 PNG 等其他格式更小,适用于像素艺术。
比较
在 images/ 文件夹中,您可以找到来自 lospec.org 的随机选择 .png 像素艺术图像以及转换后的 .pie 文件。如果您有任何这些图像属于您并且希望将其删除,请创建一个问题。
文件 | 大小差异 |
---|---|
a-strawberry-dude-509249.pie | 77.00% 的 png 版本大小 |
cubikism-023391.pie | 81.00% .. |
dune-portraits-787893.pie | 74.00% .. |
goblin-slayer-808592.pie | 63.00% .. |
khorne-berserker-509756.pie | 50.00% .. |
snowfighter-844418.pie | 64.00% .. |
内存布局
┌─ PIE Image Format ──────────────────────────────────────────────┐
│ magic u8[3] -- Magic bytes "PIE" │
│ version u8 -- Version │
│ width u16 -- Width in pixels (BE) │
│ height u16 -- Height in pixels (BE) │
│ flags u8 -- 0b00000001 is whether the palette is included │
│ -- 0b00000010 is whether there is transparency │
│ -- Other bits are reserved for future updates │
│ length u16 -- Run count of the data section (BE) │
│ data u8[] -- Indices into palette (external or internal) │
│ palette? u8[] -- Optional palette included in the image │
│ -- Stride can be 3 or 4 depending on RGB/RGBA │
└─────────────────────────────────────────────────────────────────┘
数据压缩
鉴于这种格式是为像素艺术图像设计的,因此做出了一些假设。
- 调色板通常有 2-64 种颜色,很少超过 256。
- 水平重复像素将是常见的。
因此
- 调色板可能包含多达 256 种颜色。调色板的索引可能由一个字节表示。
- 使用 RLE(行程长度编码)对具有相同索引的水平像素序列进行编码。
- 不考虑垂直轴。
序列长度不能超过 255 像素,并且它们作为字节数组的一部分回绕到下一行,因为字节数组是一维的,没有行的概念。
调色板压缩
调色板未进行压缩。
依赖关系
~1MB
~20K SLoC