2017-04-01 4 views
0

pngイメージのすべてのピクセルの最後の4ビットをゼロに変更しました。なぜ画像のサイズが半分以下に縮小されたのですか?私はpngが可逆圧縮であると信じています。埋め込みデータを取得できますか(ここではすべてのピクセルに0000を追加しましたが、実際は別のデータを追加する必要があります)。私は2015年のvbを使用しています。ビットマップ=新しいビットマップ( "C:\ STEGの\ originalimage.png")としてpngファイルのサイズを小さくしました

薄暗い画像1

 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

「埋め込まれたデータを取得できますか」なぜそれを聞かなければならないのですか?なぜあなたは自分でそれを試してみませんでしたか? – jmcilhinney

+0

私の答えに加えて、圧縮アルゴリズムが繰り返されるデータが多くなればなるほど、元のデータをより多く削除できるようになります。また、削除するデータが多いほど、圧縮ファイルのサイズは小さくなります。 –

+0

たとえば、完全にランダムなデータを含むファイルがある場合は、何も繰り返されないため、何も圧縮しないことができません。その中にパターンはありません。 –

答えて

0

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) 

圧縮ファイルでは数バイトしか使用できませんが、非圧縮ファイルではこれらの4ビットがすべてのバイトの半分を占めます。

したがって、上記の最初の例のように1 KB = 1024バイトの色データを圧縮すると、ファイルサイズは512バイト+繰り返しを示す数バイトに縮小されます。

関連する問題