Skip to content

Instantly share code, notes, and snippets.

@renatooliveira
Last active April 15, 2019 13:53
Show Gist options
  • Save renatooliveira/4bc5fd4ac1796b136862f10af8a5fe41 to your computer and use it in GitHub Desktop.
Save renatooliveira/4bc5fd4ac1796b136862f10af8a5fe41 to your computer and use it in GitHub Desktop.
from PIL import Image
import random
side = 57
class Tile:
def __init__(self, filename, shufflable):
self.name = filename
self._image = Image.open(filename)
self.shufflable = shufflable
@property
def image(self):
if self.shufflable:
return self._image.transpose(random.choice([0, 1, 2, 3]))
return self._image
class Grid:
def __init__(self, shape, tiles, white_tile, white_percentage):
self.shape = shape
self.qt_tiles = shape[0] * shape[1]
self.tiles = tiles
self.white_tile = white_tile
self.white_percentage = white_percentage
self.tiles_list = ([random.choice(self.tiles) for _ in range(int(self.qt_tiles * (1 - self.white_percentage)))] +
[white_tile for _ in range(int(self.qt_tiles * white_percentage))])
print(len(self.tiles_list))
def generate(self):
grid = Image.new('RGB', (side * self.shape[0] + self.shape[0], side * self.shape[1] + self.shape[1]), (255, 0, 0))
h_offset, w_offset = 0, 0
tiles_list = self.tiles_list.copy()
random.shuffle(tiles_list)
for _ in range(self.shape[0]):
for _ in range(self.shape[1]):
grid.paste(tiles_list.pop().image, (h_offset, w_offset))
w_offset += side + 1
h_offset += side + 1
w_offset = 0
grid.save('shapes/output.jpg')
self.log_quantities()
def log_quantities(self):
for tile in self.tiles:
print(tile.name, self.tiles_list.count(tile))
print(self.white_tile.name, self.qt_tiles * self.white_percentage)
image_01 = Tile("001.jpg", True)
image_02 = Tile("002.jpg", True)
image_03 = Tile("003.jpg", True)
image_04 = Tile("004.jpg", False)
image_05 = Tile("005.jpg", False)
image_06 = Tile("006.jpg", False)
branco = Tile("branco.jpg", False)
grid = Grid((10, 30), [image_01, image_02, image_03, image_04, image_05, image_06], branco, 0.5)
grid.generate()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment