File size: 1,187 Bytes
954caab |
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 |
from pathlib import Path
from PIL import Image
import numpy as np
def get_jigsaw_pieces(size):
'''
Load all pieces of the 4x4 jigsaw puzzle.
size (int) :
Should be 64 or 256, indicating side length of jigsaw puzzle
'''
# Location of pieces
piece_dir = Path(__file__).parent / 'assets'
# Helper function to load pieces as np arrays
def load_pieces(path):
'''
Load a piece, from the given path, as a binary numpy array.
Return a list of the "base" piece, and all four of its rotations.
'''
piece = Image.open(path)
piece = np.array(piece)[:,:,0] // 255
pieces = np.stack([np.rot90(piece, k=-i) for i in range(4)])
return pieces
# Load pieces and rotate to get 16 pieces, and cat
pieces_corner = load_pieces(piece_dir / f'4x4/4x4_corner_{size}.png')
pieces_inner = load_pieces(piece_dir / f'4x4/4x4_inner_{size}.png')
pieces_edge1 = load_pieces(piece_dir / f'4x4/4x4_edge1_{size}.png')
pieces_edge2 = load_pieces(piece_dir / f'4x4/4x4_edge2_{size}.png')
pieces = np.concatenate([pieces_corner, pieces_inner, pieces_edge1, pieces_edge2])
return pieces
|