From 257d2c2f682be358b6e6a162a0f5f912c6321d91 Mon Sep 17 00:00:00 2001 From: Flavien Date: Tue, 8 Nov 2022 21:41:10 +0100 Subject: [PATCH] Refacto lsbset.hide to use less memory --- stegano/lsbset/lsbset.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/stegano/lsbset/lsbset.py b/stegano/lsbset/lsbset.py index f6d0ee4..4cffea5 100644 --- a/stegano/lsbset/lsbset.py +++ b/stegano/lsbset/lsbset.py @@ -25,6 +25,7 @@ __date__ = "$Date: 2016/03/13 $" __revision__ = "$Date: 2019/05/31 $" __license__ = "GPLv3" +import sys from typing import IO, Iterator, Union from PIL import Image @@ -56,7 +57,7 @@ def hide( raise Exception("Not a RGB image.") img = img.convert("RGB") - img_list = list(img.getdata()) + encoded = img.copy() width, height = img.size index = 0 @@ -76,7 +77,12 @@ def hide( while index + 3 <= len_message_bits: generated_number = next(generator) - r, g, b, *a = img_list[generated_number] + + col = generated_number % width + row = int(generated_number / width) + coordinate = (col, row) + + r, g, b, *a = encoded.getpixel(coordinate) # Change the Least Significant Bit of each colour component. r = tools.setlsb(r, message_bits[index]) @@ -85,18 +91,12 @@ def hide( # Save the new pixel if img.mode == "RGBA": - img_list[generated_number] = (r, g, b, *a) + encoded.putpixel(coordinate, (r, g, b, *a)) else: - img_list[generated_number] = (r, g, b) + encoded.putpixel(coordinate, (r, g, b)) index += 3 - # create empty new image of appropriate format - encoded = Image.new(img.mode, (img.size)) - - # insert saved data into the image - encoded.putdata(img_list) - return encoded