我将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")
答案 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字节+表示重复的几个字节。