1 | # 原文 |
一眼看上去是黑白(01)图片
先编程生成图像看看
读取文件
1
2
3
4
5
6
7
8
9def read_file(path):
data_list = []
with open(path,"r+") as f:
while True:
line = list(f.readline()[:-1])
if not line:
break
data_list.append(line)
return data_list生成csv文件
1
2
3
4
5
6def save_data(data_list,path):
with open(path,"w+",encoding="utf-8") as f:
for data in data_list:
data = ",".join(data)
f.write(data)
f.write("\n")将csv用pandas读入生成图片
1
2
3
4
5
6
7
8
9
10
11
12
13import numpy as np
import pandas as pd
from imageio import imsave
from PIL import Image
def ArrayToPicture():
names = [i for i in range(25)]
train_data = pd.read_csv("./1and0.csv",names=names)
data = train_data
data = np.matrix(data)
print(data)
data = np.reshape(data,(25,25))
imsave("2.png",data)25x25的图片
像二维码,但少了标志位,并且黑白区是反的,可看右下角的小黑框发现
然后对01互换,加上标志位
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
def read_file(path):
data_list = []
with open(path,"r+") as f:
while True:
line = list(f.readline()[:-1])
if not line:
break
len_l = len(line)
for i in range(len_l):
if line[i] == "0":
line[i] = "1"
else:
line[i] = "0"
data_list.append(line)
return data_list
def deal_data_list(data_list):
if data_list[0][0] == "1":
for i in range(7):
data_list[0][i] = "0"
data_list[6][i] = "0"
data_list[i][0] = "0"
data_list[i][6] = "0"
for j in range(3):
data_list[2+j][2] = "0"
data_list[2+j][3] = "0"
data_list[2+j][4] = "0"
if data_list[0][-1] == "1":
for i in range(1,8):
data_list[0][-i] = "0"
data_list[6][-i] = "0"
data_list[i-1][-1] = "0"
data_list[i-1][-7] = "0"
for j in range(3):
data_list[2+j][-5] = "0"
data_list[2+j][-4] = "0"
data_list[2+j][-3] = "0"
if data_list[-1][0] == "1":
for i in range(7):
data_list[-1][i] = "0"
data_list[-7][i] = "0"
data_list[-i-1][0] = "0"
data_list[-i-1][6] = "0"
for j in range(3):
data_list[-3][2+j] = "0"
data_list[-4][2+j] = "0"
data_list[-5][2+j] = "0"
return data_list测试成功
接着再研究了下,相关的函数,发现了更好的实现方法,这方法是完全懂了后才好写出来的
https://blog.csdn.net/qq_43528553/article/details/119084941
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31from PIL import Image
with open("1and0.txt", "r") as f:
# strip以换行切割
data = [list(i.strip()) for i in f.readlines()]
# 7*7的定位标志
flag = [
[1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 0, 0, 0, 1],
[1, 0, 1, 1, 1, 0, 1],
[1, 0, 1, 1, 1, 0, 1],
[1, 0, 1, 1, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1]
]
img = Image.new("1", (25, 25))
for i in range(len(data)):
for j in range(len(data[1])):
# 左上角定位标志
if i < 7 and j < 7:
# putpixel(self, xy, color), 修改(i,j)的颜色为,flag[i][j]^1, ^异或,对原数据的01互换
img.putpixel((i, j), flag[i][j] ^ 1)
# 左下角定位标志
elif i > 17 and j < 7:
img.putpixel((i, j), flag[i-18][j] ^ 1)
# 右上角定位标志
elif i < 7 and j > 17:
img.putpixel((i, j), flag[i][j-18] ^ 1)
else:
img.putpixel((i, j), int(data[i][j]) ^ 1)
# resize 大小变为 500x500
img.resize((500, 500)).show()