缩小了 png 文件的大小

Size of png file is reduced

我将 png 图像中所有像素的最后 4 位更改为零。为什么图像的尺寸缩小到不到一半?。我相信png是无损压缩。我能检索嵌入的数据吗?(这里我为所有像素添加了 0000,但在实际情况下我需要添加不同的数据)我正在使用 vb 2015。我使用的代码附在下面。

Dim image1 As Bitmap = New Bitmap("C:\STEG\originalimage.png")

        For i As Integer = 0 To image1.Height - 1
            For j As Integer = 0 To image1.Width - 1

                Dim value As Color = image1.GetPixel(j, i)
                Dim t1 As Byte = value.R
                Dim t2 As Byte = value.G
                Dim t3 As Byte = value.B

                t1 = t1 And 240
                t2 = t2 And 240
                t3 = t3 And 240
                image1.SetPixel(j, i, Color.FromArgb(255, t1, t2, t3))

            Next

        Next

        image1.Save("C:\STEG\originalimageedited.png")

PNG 是一种无损图像压缩格式,是的。但是,如果它是无损的,则与尺寸的大幅减小没有任何关系。影响它的是压缩算法的工作方式。

我不知道 PNG 的算法是如何工作的,但基本上压缩是关于重复数据。例如,如果每个字节的最后 4 位是 0000,像这样:

1000 0000
0000 0000
1101 0000
0110 0000

...然后压缩算法可以将其表示为:

repeat 0000 every 4 bits

或:

1000 4-0
4-0  4-0
1101 4-0
0110 4-0

(4-0 indicates that it should write four '0' bits)

这在压缩文件中可能只占用几个字节,而在未压缩文件中这四位占每个字节的一半。

因此,如果您有 1 KB = 1024 字节的颜色数据并像上面的第一个示例一样压缩它,文件大小将(粗略地说)缩小到 512 字节 + 指示重复的几个字节。