使用小尺寸优化的PNG图像进行图像压缩

时间:2018-09-22 03:20:47

标签: image-processing png image-compression

我将数据存储在图像中,其中每个像素代表一个数据点(键:值对)。像素的位置表示“键”,像素的颜色表示数字“值”。数据示例如下:

| key  | value |
| ---- | ----- |
| A    | 255   |
| B    | 1000  |
| C    | 20000 |
| D    | 15    |

数据将按以下方式转换为像素数据:

| pixel location | r,g,b   |
| -------------- | ------- |
| 0,0            | 0,0,255 |
| 0,1            | 0,3,232 |
| 1,0            | 0,78,32 |
| 1,1            | 0,0,15  |

点到像素位置的映射由a formula完成,某些数据点“键”始终映射到相同的像素位置。 通过将数字转换为24位,然后将其划分为8位块并将其转换回具有r,g,b值的数字,可以将数值转换为r,g,b。 下面是包含655x256px的65536个数据点的实际图像

vgy.me-s5HkyL

如果我准备另一个数据集,其中对“键”进行了排序,并且其等级被分配为“值”,那么我将得到一个这样的表(仅显示4行):

| key  | value(**rank**) | r,g,b |
| ---- | --------------- | ----- |
| A    | 0               | 0,0,0 |
| B    | 1               | 0,0,1 |
| C    | 2               | 0,0,2 |
| D    | 3               | 0,0,3 |

如果我为65536个数据点准备等级表并转换为图像,那就是我得到的

vgy.me-EtlqNf

现在,有趣的是,第二张图像具有相同数量的像素,并且包含更多的颜色值,但占用的空间更少(第一张图像为158k,第二张图像为 1.2k )。我猜这是因为我使用的公式与PNG压缩算法一致。

所以,我的问题是,通过将第二张图像用作遮罩,底漆等,我们可以使第一张图像占用更少的空间吗?我在两个图像之间尝试了XOR [1],但没有帮助。我的总体目标是在图像中尽可能无损地存储key:value对图像。

[1]:为什么要XOR?因为我需要一种可逆的方式,所以我不想丢失原始数据

0 个答案:

没有答案