WIP Insomni'hack
This commit is contained in:
126
insomnihack24/misc/puzzled/puzzled.py
Normal file
126
insomnihack24/misc/puzzled/puzzled.py
Normal file
@@ -0,0 +1,126 @@
|
||||
from PIL import Image
|
||||
import random
|
||||
import itertools
|
||||
from pyzbar.pyzbar import decode
|
||||
|
||||
|
||||
def cutPieces(image_path, output_name_scheme):
|
||||
# Open the image
|
||||
original_image = Image.open(image_path)
|
||||
|
||||
# Get the size of the image
|
||||
width, height = original_image.size
|
||||
assert (width == height)
|
||||
|
||||
# Calculate the size of each grid cell
|
||||
cell_width = width // 3
|
||||
cell_height = height // 3
|
||||
|
||||
# Split the original image into 9 pieces
|
||||
for i in range(16):
|
||||
# Calculate the coordinates of the current grid cell
|
||||
x1 = (i % 3) * cell_width
|
||||
y1 = (i // 3) * cell_height
|
||||
x2 = x1 + cell_width
|
||||
y2 = y1 + cell_height
|
||||
|
||||
# Crop the corresponding part of the original image
|
||||
cropped_piece = original_image.crop((x1, y1, x2, y2))
|
||||
|
||||
# Save the cropped piece
|
||||
output_path = output_name_scheme.format(i)
|
||||
cropped_piece.save(output_path)
|
||||
|
||||
|
||||
def generateQRCodes(topLeft, topRight, bottomLeft, pieces):
|
||||
# Create a new image to store rearranged pieces
|
||||
new_image = Image.new("RGB", (234, 234))
|
||||
|
||||
# Paste the QR codes onto the new image
|
||||
new_image.paste(topLeft, (0, 0))
|
||||
new_image.paste(topRight, (156, 0))
|
||||
new_image.paste(bottomLeft, (0, 156))
|
||||
|
||||
print(pieces)
|
||||
|
||||
possible_combos = itertools.permutations(pieces, 6)
|
||||
|
||||
i = 0
|
||||
for a, b, c, d, e, f in possible_combos:
|
||||
# Paste the remaining pieces onto the new image
|
||||
new_image.paste(Image.open(a), (78, 0))
|
||||
new_image.paste(Image.open(b), (156, 78))
|
||||
new_image.paste(Image.open(c), (0, 78))
|
||||
new_image.paste(Image.open(d), (78, 78))
|
||||
new_image.paste(Image.open(e), (156, 156))
|
||||
new_image.paste(Image.open(f), (78, 156))
|
||||
|
||||
# Save the rearranged image
|
||||
new_image.save(f"solutions/possible_qr{i}.png")
|
||||
i += 1
|
||||
|
||||
|
||||
def decodeQRCode(image_path):
|
||||
image = Image.open(image_path)
|
||||
|
||||
# Decode the QR code
|
||||
decoded_objects = decode(image)
|
||||
|
||||
# Check if any QR code was found
|
||||
if decoded_objects:
|
||||
# Iterate through all the detected QR codes and print their data
|
||||
for obj in decoded_objects:
|
||||
print("Data:", obj.data.decode('utf-8'))
|
||||
print("Type:", obj.type)
|
||||
|
||||
|
||||
def shuffle3x3GridImage(image_path, output_path):
|
||||
# Open the image
|
||||
original_image = Image.open(image_path)
|
||||
|
||||
# Get the size of the image
|
||||
width, height = original_image.size
|
||||
assert (width == 234 and height == 234)
|
||||
|
||||
# Calculate the size of each grid cell
|
||||
cell_width = width // 3
|
||||
cell_height = height // 3
|
||||
|
||||
# Create a new image to store rearranged pieces
|
||||
new_image = Image.new("RGB", (width, height))
|
||||
|
||||
# Create a list to store shuffled grid positions
|
||||
positions = [(x, y) for x in range(3) for y in range(3)]
|
||||
random.shuffle(positions)
|
||||
|
||||
# Split the original image into 16 pieces and rearrange them
|
||||
for i, pos in enumerate(positions):
|
||||
# Calculate the coordinates of the current grid cell
|
||||
x1 = pos[0] * cell_width
|
||||
y1 = pos[1] * cell_height
|
||||
x2 = x1 + cell_width
|
||||
y2 = y1 + cell_height
|
||||
|
||||
# Crop the corresponding part of the original image
|
||||
cropped_piece = original_image.crop((x1, y1, x2, y2))
|
||||
|
||||
# Calculate the coordinates to paste the cropped piece
|
||||
new_x = (i % 3) * cell_width
|
||||
new_y = (i // 3) * cell_height
|
||||
|
||||
# Paste the cropped piece onto the new image
|
||||
new_image.paste(cropped_piece, (new_x, new_y))
|
||||
|
||||
# Save the rearranged image
|
||||
new_image.save(output_path)
|
||||
|
||||
|
||||
# key = "Not the real key!"
|
||||
# random.seed(key)
|
||||
# shuffle3x3GridImage("fullVersion25QRcode.png", "puzzledVersion25QRcode.png")
|
||||
|
||||
# cutPieces("puzzledVersion25QRcode.png", "puzzledVersion25QRcode_piece{}.png")
|
||||
|
||||
paths = [f"solutions/possible_qr{i}.png" for i in range(720)]
|
||||
for path in paths:
|
||||
decodeQRCode(path)
|
||||
Reference in New Issue
Block a user