缩小了 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 字节 + 指示重复的几个字节。
我将 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 字节 + 指示重复的几个字节。