2017-04-01 15 views
0

Ich habe die letzten 4 Bits aller Pixel in einem PNG-Bild auf Null geändert. Warum wurde die Bildgröße auf weniger als die Hälfte reduziert? Ich glaube, dass png verlustfreie Komprimierung ist. Kann ich die eingebetteten Daten abrufen (hier habe ich 0000 zu allen Pixeln hinzugefügt, aber in Wirklichkeit muss ich andere Daten hinzufügen) Ich benutze vb 2015. Der Code, den ich verwendet habe, ist unten angehängt.Größe der PNG-Datei ist reduziert

Dim image1 Wie Bitmap = Neue 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

"Kann ich die eingebetteten Daten abrufen?" Warum müssen Sie uns das fragen? Warum hast du es nicht einfach selbst versucht? – jmcilhinney

+0

Zusätzlich zu meiner Antwort: Je mehr Daten ein Komprimierungsalgorithmus wiederholen kann, desto mehr kann er die ursprünglichen Daten entfernen. Und je mehr Daten entfernt werden, desto kleiner ist die Größe der komprimierten Datei. –

+0

Zum Beispiel, wenn Sie eine Datei haben, die völlig zufällige Daten enthält, können Sie nicht viel (wenn überhaupt) komprimieren, weil es nichts zu wiederholen gibt, es gibt kein Muster darin. –

Antwort

0

PNG ist ein verlustfreies Bildkompressionsformat, ja. Wenn es jedoch verlustfrei ist oder nicht, hat nichts mit der großen Größenreduzierung zu tun. Was bewirkt, ist, wie der Komprimierungsalgorithmus funktioniert.

Ich weiß nicht, wie der Algorithmus von PNG funktioniert, aber im Grunde geht es bei der Komprimierung um das Wiederholen von Daten. Zum Beispiel, wenn die letzten 4 Bits jedes Byte ist 0000, etwa so:

1000 0000 
0000 0000 
1101 0000 
0110 0000 

... dann ein Kompressionsalgorithmus zum Beispiel ausdrücken könnte es als:

repeat 0000 every 4 bits 

oder:

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

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

, die nur ein paar Bytes in der komprimierten Datei benötigen, während in der unkomprimierten Datei diese vier Bits die Hälfte jedes Bytes ausmachen.

Also, wenn Sie 1 KB = 1024 Bytes von Farbdaten haben und es wie das erste Beispiel oben komprimieren, wird die Dateigröße (grob gesagt) auf 512 Bytes + die wenigen Bytes, die die Wiederholung angeben, schrumpfen.

Verwandte Themen