注:本篇为学习B站up主偶尔有点小迷糊总结,如有侵权请联系我删除文章
具体原理见『整活』如何把百万字小说藏进图片_哔哩哔哩_bilibili
简单来说就是把小说转化为16进制数字,用RGB三值储存
代码如下:
#将小说加密为图片
from PIL import Image
import math
def encode(text):
str_len=len(text)
width=math.ceil(str_len**0.5)
im=Image.new('RGB',(width,width),0x0)
x,y=0,0
for i in text:
index=ord(i)
rgb=((index&0xFF00)>>8,255,index&0xFF)
im.putpixel((x,y),rgb)
if x==width-1:
x=0
y+=1
else:
x+=1
return im
if __name__=='__main__':
with open('三体.txt',encoding='utf-8') as f:
all_text=f.read()
im=encode(all_text)
im.save('out.bmp')
#图片转文字
from PIL import Image
def decode(im):
width,height=im.size
lst=[]
for y in range(height):
for x in range(width):
red,green,blue=im.getpixel((x,y))
if(blue|green|red)==0:
break
index=(red<<8)+blue
lst.append(chr(index))
return''.join(lst)
if __name__=='__main__':
all_text=decode(Image.open('out.bmp','r'))
with open('decode.txt','w',encoding='utf_8') as f:
f.write(all_text)