一张图片是由RGB(Red,Green,Blue)(0~255)组成的,而中文文字经过utf-8转码后也是一串数字,那么可以将文字藏在图片里吗?答案是肯定的.以"龙"字为例utf-8编码是/40857(十进制)
/0x9f99(十六进制)
/100111111 0011001(二进制)
/如果把前八位100111111
作为G(Green)储存,后八位0011001
作为B(Blue)储存就可以得到一个像素,以此文章的每个字都可以当成一个像素,很有意思,对于python的学习也很有帮助(藏小说神器)
print(ord('龙'))
# 结果为40857
1.环境要求
本机带有python 3.7.X
的编程环境
2.准备工作
在cmd输入下面代码安装pillow以导入PIL模块
pip install pillow
3.转换为图片代码
from PIL import Image
import math
def encode(story):#定义函数
width=math.ceil(len(story)**0.5)#计算字数的开方
picture=Image.new("RGB",(width,width),0x0)#生成长宽为width的正方形
x,y=0,0#定义坐标
for char in story:
rgb=(0,(ord(char) &0xff00)>>8,ord(char)& 0xff)#设置rgb为(0,汉字前八位,后八位)
picture.putpixel((x,y),rgb)#设置像素坐标和rgb
if x== width-1:
x=0
y+=1
else:
x+=1
return picture
if __name__=='__main__':
with open("1.txt",encoding='utf-8') as file:#打开txt文件操作
txt=file.read()
picture=encode(txt)#传入make函数
picture.save("out.bmp")#生成神秘图片
4.图片解码文字代码
from PIL import Image
def decode(picture):#定义转换函数
width,height=picture.size#传出长和宽
txt=[]#文章的列表
for y in range(height):
for x in range(width):
R,G,B=picture.getpixel((x,y))#(读取x,y的rgb)
if(R|G|B)==0:#设置文章终止
break
Comments | NOTHING