题目是一张图片,给的提示是go green题目如下图:
图片长这样的:
(二).分析:
根据提示,很大很大可能与绿色有关,于是先去除绿色,发现没啥发现,如下图:
于是想到可能与绿色的最低位有关系,于是提取出来写到文本里,可能可以用来生成二维码之类的,如下:
于是把这这些值作为黑白像素生成图片,生成结果如下:
(三).贴上代码:
(1).去除绿色:
#!/usr/bin/env python # -*- coding:utf-8 -*- from PIL import Image #打开下载过来的图片 png1 = Image.open("vape_nation.png") #创建一个和现有图片大小一样的图片 png2 = Image.new("RGBA",(png1.width,png1.height)) #读取像素中的rgb值,并将绿色的值设为0 for x in range(0,png1.height): for y in range(0,png1.width): r,g,b = png1.getpixel((x,y)) png2.putpixel((x, y), (r, 0, b)) png1.show() png2.show()
(2).提取绿色通道最低位:
#!usr/bin/env python # -*- coding:utf-8 -*- from PIL import Image #打开下载过来的图片 png1 = Image.open("vape_nation.png") #创建一个和现有图片大小一样的图片 #png2 = Image.new("RGBA", (png1.width, png1.height)) #创建一个文件用来保存绿色通道最低位 f = open("g.txt", "w") #读取像素中的rgb值,并将绿色的值设为0 for x in range(0,png1.height): for y in range(0,png1.width): r,g,b = png1.getpixel((x,y)) #绿色通道的值对0x01进行位运算写入文件 f.write(str(g & 1)) #显示 #png1.show() #png2.show() f.close()
(3).通过绿色通道最低位,生成图片:
#!/usr/bin/env python # -*- coding:utf-8 -*- from PIL import Image #打开下载过来的图片 png1 = Image.open("vape_nation.png") #创建一个和现有图片大小一样的图片 png2 = Image.new("RGBA",(png1.width,png1.height)) #读取像素中的rgb值,并提取出green通道的最低位的值 for x in range(0,png1.height): for y in range(0,png1.width): r,g,b = png1.getpixel((x,y)) #根据最低位的值生成一个黑白的图片 if g&1 == 1: png2.putpixel((x,y),(255,255,255)) else: png2.putpixel((x,y),(0,0,0)) png2.show()
(四).说明:
反推这种方法,也可以将其他内容写到图片中,从而实现信息隐藏的效果。
(五).如有不足之处,还请斧正。
原文:http://blog.51cto.com/daye8ku/2058211