from PIL import Image
# 定义函数getflag将要隐写的文本的内容转换成其对应的二进制串
def getflag(path):
# 以二进制文件形式打开文件
f = open(path, "rb")
# 读入文件内容
s = f.read()
# 将文件内容转换成其对应的二进制码
str0 = ""
for i in range(len(s)):
str0 = str0+(bin(s[i]).replace("0b", "")).zfill(8)
f.closed
return str0
# 定义函数对图片进行隐写
def get(impath, txtpath, newpath):
flag = getflag(txtpath)
flen = len(flag)
# 打开图片
im = Image.open(impath)
# 读入宽和高
w = im.size[0]
h = im.size[1]
print("width:"+str(w))
print("height:"+str(h))
cnt = 0
# 将信息逐位隐写进图片
for h in range(h):
for w in range(w):
pix = im.getpixel((w,h))
r = pix[0]
g = pix[1]
b = pix[2]
if cnt == flen:
break
r = r - r % 2 + int(flag[cnt])
cnt = cnt + 1
if cnt == flen:
im.putpixel((w,h),(r,g,b))
break
g = g - g%2 + int(flag[cnt])
cnt = cnt + 1
if cnt == flen:
im.putpixel((w,h),(r,g,b))
break
b = b - b%2 + int(flag[cnt])
cnt = cnt + 1
if cnt == flen:
im.putpixel((w, h), (r, g, b))
break
if cnt % 3 == 0:
im.putpixel((w, h),(r, g, b))
# 保存隐写后的图片到相应路径
im.save(newpath)
# 开始隐写
impath = "E:\ctf\guanxi.bmp"
txtpath = "E:\ctf\\flag.txt"
newpath = "E:\ctf\guanxige.bmp"
get(impath, txtpath, newpath) |