png文件的大小减少了

时间:2017-04-01 08:01:29

标签: vb.net png

我将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")

1 个答案:

答案 0 :(得分:0)

PNG是一种无损图像压缩格式,是的。然而,如果它是无损的,那么与尺寸的大幅减少没有任何关系。影响它的是压缩算法的工作原理。

我不知道PNG的算法是如何工作的,但基本上压缩就是重复数据。例如,如果每个字节的最后4位是String hql = "from Records where DATE(startDate)=? "; Query query = session.createQuery(hql); query.setParameter(0, getStartDate()); ,就像这样:

0000

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

1000 0000
0000 0000
1101 0000
0110 0000

或:

repeat 0000 every 4 bits

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

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