From 2d74094dc3e19b63c8a53f246efd302c80e13279 Mon Sep 17 00:00:00 2001 From: AdrienCos Date: Thu, 6 Jun 2019 21:59:25 -0400 Subject: [PATCH] Fixed steganalysis parity to be compatible with RGBA images --- stegano/steganalysis/parity.py | 2 +- tests/expected-results/parity_rgba.png | Bin 0 -> 2442 bytes tests/test_steganalysis.py | 9 +++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 tests/expected-results/parity_rgba.png diff --git a/stegano/steganalysis/parity.py b/stegano/steganalysis/parity.py index 0dfb3ac..6034664 100644 --- a/stegano/steganalysis/parity.py +++ b/stegano/steganalysis/parity.py @@ -31,7 +31,7 @@ def steganalyse(img: Image.Image) -> Image.Image: """ Steganlysis of the LSB technique. """ - encoded: Image.Image = img.copy() + encoded = Image.new(img.mode, (img.size)) width, height = img.size for row in range(height): for col in range(width): diff --git a/tests/expected-results/parity_rgba.png b/tests/expected-results/parity_rgba.png new file mode 100644 index 0000000000000000000000000000000000000000..a1cf2afcaed9517a96a49610a3a676e84678a143 GIT binary patch literal 2442 zcmb`}Yd8}O8wc=tddnO#QqC<=L{>RPZ4PP0%4r!gtdhveL}BbDwW%bE$zfx1$Yx`b za}Lvl#*iH6P))JN=`j|)dmVb}%lrBL@O-(i-;SYb-4g@st$`o_iTHm&@@r?J!#_H=H0jYNlm-C*WIrq@ zz$#>W`nG&7AC4M0gK~KXM|CcwkLXnk;4^WnR~7pJSmXR- zoDXOI2XW@i&5E?ph4VXG)sK$H*n$}=X=+frb|LhZ5e5Y|glY-P>K-UdjJ9;Mr)DtT`3 z;SC-!^3JgBz!sXj6nQ;9N~x~;=}Wb2g)yn?(|KWNhMH#P$I9XFmO|#$Y}dHXu4+-q zJB#cKQ?q3eo))0E&xH*n6QzST(>S(>IQ>p9Z^vdOggj&rfV=Mk%7WW?IDQ#b#Ea@pnPE zs7{!Yd2N-If(2b6Jm`){Uz{}XUj6di9J0=t#!EQUosyGia1|~;{T613smkSp1)(j4**N3U3{fo^&KPJOj<5q#a3wJyPWAV$VSvZwGT5g4fy2-)A6QL%fr zD{tcI-35U*udPdAPi(kqTW{q)Mv-LAC)xg~Rfnp_UqttLLyoMjf#d~^ zhjWUycP6;cBm3 zvA}V43LBc{Cn(K1IVo;Rhq(eBO-%$Ky)o zs1(^i%?&*v?~j4q3l|$CP*8E8w<#;E%PJ>-R~zEi#%x4imh|S{AyLlFEX3t5sZ$y< zr2&PS&rCNp8|kvPRX#zZmO`(~+1&YyPl-6R#kZscV#1%tQ<+ljo9j>@$l|LUsC5sp2B51$k_B*2 z;s1vhD%6sx$jVlYFYjJ-7;22fVwZUYE^_2WMcapbqUM7mu^Bk(M#&bdk1d^|3! zfj0&134>ax3~m0%ZJaJms&3Jq%nc=6V&U{kqz`vu^-3sP>QI`2GRSy7le)31UT8v`)QrK_9V8bpQ=mj*3?$ z1>Zs4s3?pngKE#Ue`A~HbxbOA6u9OZnO<_|Xphs;2gefII7HzX*P*X_%wKQt;_)}D zn2Yw-^3yG4FWL3m*16?7s0heFEv&x_=C;K5TQx0jE+VEkE+qVJhphTz#A3A9@J%(n z$0C>2*H;xxN5#4@PQta>`Z*oOn}YP`R5xlUv`V;DhtEc>NP2n zWZ6X{2i}&*-d)67Q3;l7=R3E>9wwp1hHU=1Qf$1_)KKa7rhSOnk^AD-&-GWD-D3;d zc}3g1>DZcML Vmg2ytfBjeh#2HsO+u`#4zX6bUnzjG{ literal 0 HcmV?d00001 diff --git a/tests/test_steganalysis.py b/tests/test_steganalysis.py index 26ae607..61dac1c 100644 --- a/tests/test_steganalysis.py +++ b/tests/test_steganalysis.py @@ -50,6 +50,15 @@ class TestSteganalysis(unittest.TestCase): diff = ImageChops.difference(target, analysis).getbbox() self.assertTrue(diff is None) + def test_parity_rgba(self): + """ Test that stegano.steganalysis.parity works with RGBA images + """ + img = Image.open('./tests/sample-files/transparent.png') + analysis = parity.steganalyse(img) + target = Image.open("./tests/expected-results/parity_rgba.png") + diff = ImageChops.difference(target, analysis).getbbox() + self.assertTrue(diff is None) + if __name__ == '__main__': unittest.main()