-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpoc.py
81 lines (70 loc) · 2.25 KB
/
poc.py
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from io import BytesIO
from PIL import Image
from sys import argv
import base64
import qrcode
def parse_args() -> tuple[str, int]:
if any([arg for arg in argv if arg in ['-h', '--help']]):
print("Usage: python poc.py [url] [size]")
exit()
url = "https://wtfender.com"
size = 10
if len(argv) > 1:
url = argv[1]
if len(argv) > 2:
size = int(argv[2])
return url, size
def generate_qr_code(link: str, size: int) -> Image:
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=size,
border=4,
)
qr.add_data(link)
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white")
return img
def quarter_image(img: Image) -> list[Image]: # type: ignore
image = img.get_image()
image.convert('L')
# get image size
width, height = image.size
# split image into quarters
quarters = []
for i in range(2):
for j in range(2):
left = i * width // 2
upper = j * height // 2
right = (i + 1) * width // 2
lower = (j + 1) * height // 2
quarter = image.crop((left, upper, right, lower))
quarters.append(quarter)
return quarters
def convert_to_base64_uris(quarters: list[Image]) -> list[str]: # type: ignore
quarters_b64 = []
for quarter in quarters:
buffered = BytesIO()
quarter.save(buffered, format="JPEG")
img_str = base64.b64encode(buffered.getvalue()).decode()
quarters_b64.append('data:image/jpeg;base64,' + img_str)
return quarters_b64
def create_html_table(quarters_b64: list[str]) -> str:
html = f'''<table style="border: none; border-spacing: 0px;">
<tr>
<td><img src="{quarters_b64[0]}"></td>
<td><img src="{quarters_b64[2]}"></td>
</tr>
<tr>
<td><img src="{quarters_b64[1]}"></td>
<td><img src="{quarters_b64[3]}"></td>
</tr>
</table>'''
return html
if __name__ == '__main__':
url, size = parse_args()
qr = generate_qr_code(url, size)
quarters = quarter_image(qr) # [ TopLeft, BL, TR, BR ]
quarters_b64 = convert_to_base64_uris(quarters)
table_html = create_html_table(quarters_b64)
print(table_html)