前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图片魔术

图片魔术

作者头像
老肥码码码
发布2020-01-17 11:33:40
4280
发布2020-01-17 11:33:40
举报

今天给大家变个小魔术。鄙人不才,师承谦哥,给大家献丑了。

我左手拿着一张图片,右手握着一只鼠标。

看清楚了哦,不能眨眼,一起来见证奇迹!我轻轻地这么一点,嗖的一下。

这是什么鬼魔术嗷,放了两张一样的图片糊弄观众?

非也,非也。这是两张看起来相同实际上并不相同的图片。在这第二张图片里面,我嵌入了一段秘密信息,也就是神秘的隐写术

隐写方法及其应用曾出现在许多古代东西方的文字记载之中。

《Histories》最早描述了隐写的应用,其中记载,Histiaeus将消息刺在奴隶的头皮上,等到头发长出来再将奴隶送出去。

利用头发这个掩体传递密文,而本文所表演的魔术不过是把掩体换成了图片而已,使用了一种称为最低有效位(LSB)的算法。

我们知道图像像素的样点存在最低意义的比特位,比方说某个像素点为(255,255,255),用二进制表示就是每个颜色通道的数值都是11111111,最低意义的比特位就是这最后一位1,由于自然信号样点的奇偶性随机,对它们的修改是很难被人肉眼所感知的。比方说像素254和255仅在最低位不同,其差别是相当小的。

LSB算法正是通过修改这个最低有效位来达到传递密文的目的。

隐写不仅需要发出方将信息藏进载体里,接收方需要正确从这个藏了信息的载体里提取出信息。LSB算法也是如此,可以分成两部分来看待,嵌入算法以及提取算法

嵌入算法的主要做法是提取原始图片的像素,将其每个像素点最低有效位全部置零。将需要嵌入的秘密信息转换成二进制存储,并以此依次修改原图的像素。下面是嵌入算法的主要代码,其中主要依靠 PIL 库来进行图片的操作处理。

代码语言:javascript
复制
def func(str1,str2,str3):  
    im = Image.open(str1) 
    #获取图片的宽和高
    width,height= im.size[0],im.size[1]
    print("width:"+str(width))
    print("height:"+str(height))
    count = 0
    #获取需要隐藏的信息 
    key = get_key(str2) 
    keylen = len(key)
    for h in range(height):
        for w in range(width):
            pixel = im.getpixel((w,h))
            a=pixel[0]
            b=pixel[1]
            c=pixel[2]
            if count == keylen:
                break
            a= a-mod(a,2)+int(key[count])
            count+=1
            if count == keylen:
                im.putpixel((w,h),(a,b,c)) 
                break
            b =b-mod(b,2)+int(key[count])
            count+=1 
            if count == keylen:
                im.putpixel((w,h),(a,b,c)) 
                break
            c= c-mod(c,2)+int(key[count])
            count+=1
            if count == keylen:
                im.putpixel((w,h),(a,b,c))
                break
            if count % 3 == 0:
                im.putpixel((w,h),(a,b,c))
    im.save(str3)

而提取算法恰好与嵌入算法对应,你在最低位嵌入,我就只要把新图片的最低位提取出来,把二进制数据转换成十进制再转换成字符串即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与数据之美 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档