from gimpfu import *
def do_message_box(msg):
handler = pdb.gimp_message_get_handler()
pdb.gimp_message_set_handler(MESSAGE_BOX) #{ MESSAGE-BOX (0), CONSOLE (1), ERROR-CONSOLE (2) }
pdb.gimp_message(msg)
pdb.gimp_message_set_handler(handler)
def add_steg_text(image, layer, text):
length = len(text)
# limit length of message to 255
if length > 255:
do_message_box("text too long! (don't exeed 255 characters)")
return
pdb.gimp_image_undo_group_start(image)
newlayer = layer.copy()
image.add_layer(newlayer, -1)
pr = newlayer.get_pixel_rgn(0,0,newlayer.width,newlayer.height)
for index in range(length+1):
col = (index) / layer.height
row = (index) % layer.height
if index == 0: #store length in first pixel
newpixel = chr(length)
else: #store string in subsequent pixels
newpixel = text[index-1]
newpixel += pr[col,row][1] + pr[col,row][2]
if layer.has_alpha:
newpixel += pr[col,row][3]
pr[col,row] = newpixel
newlayer.flush()
layer.merge_shadow(True)
newlayer.update(0, 0, newlayer.width, newlayer.height)
pdb.gimp_image_undo_group_end(image)
gimp.displays_flush()
def read_steg_text(image, layer, outputmode):
pr = layer.get_pixel_rgn(0,0,layer.width,layer.height)
length = ord(pr[0,0][0])
msg = ""
for index in range(length):
col = (index+1) / layer.height
row = (index+1) % layer.height
msg += pr[col,row][0]
if outputmode == 0:
do_message_box("%s" %msg)
register(
"python_fu_simple_steg_text_add",
"Adds a simple 'hidden message' to an RGB image",
"Adds a simple 'hidden message' to an RGB image",
"",
"",
"Version 1.0 (25-3-2015)",
"Add message",
"RGB*",
[
(PF_IMAGE, "image", "Input image", None),
(PF_DRAWABLE, "drawable", "Input layer", None),
(PF_STRING, "text", "Text:", "")
],
[],
add_steg_text,
menu="<Image>/MyScripts/Steg/Text Steganography")
register(
"python_fu_simple_steg_text_read",
"Reads a simple 'hidden message' added to an RGB image",
"Reads a simple 'hidden message' added to an RGB image",
"",
"",
"Version 1.0 (25-3-2015)",
"Display message",
"RGB*",
[
(PF_IMAGE, "image", "Input image", None),
(PF_DRAWABLE, "drawable", "Input layer", None),
(PF_OPTION, "outputmode", "Output mode", 0, ("Display in a message box", "None"))
],
[],
read_steg_text,
menu="<Image>/MyScripts/Steg/Text Steganography")
main()
jismy jose
0
Newbie Poster
Recommended Answers
Jump to PostYour problem is?
Oh, I see, you also added it to the snippet.
All 2 Replies
Reply to this topic
Be a part of the DaniWeb community
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.