(一).题目介绍:
题目是一张图片,给的提示是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()
(四).说明:
反推这种方法,也可以将其他内容写到图片中,从而实现信息隐藏的效果。
(五).如有不足之处,还请斧正。
转载于:https://blog.51cto.com/daye8ku/2058211