Last active
November 29, 2017 19:58
-
-
Save Aareon/1b592e1e37adc61c52aa80792a4ba88f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import os | |
| import sys | |
| import imagehash | |
| from PIL import Image, ImageDraw | |
| import pygame | |
| pygame.init() | |
| class Tiler: | |
| def __init__(self, imageName, tile_size): | |
| self.imageName = imageName | |
| self.spritesheet = Image.open(os.getcwd() + "\\" + imageName) | |
| self.tile_size = tile_size | |
| screen_w = self.spritesheet.size[0] | |
| screen_h = self.spritesheet.size[1] | |
| self.screen = pygame.display.set_mode((screen_w, screen_h)) | |
| self.clock = pygame.time.Clock() | |
| pygame.display.set_caption(imageName + " - tilemap (Press any key to begin!)") | |
| def getPos(self, tileX, tileY): | |
| posX = self.tile_size * tileX | |
| posY = self.tile_size * tileY | |
| return (posX, posY) | |
| def getTile(self, tileX, tileY): | |
| posX, posY = self.getPos(tileX, tileY) | |
| box = (posX, posY, posX + self.tile_size, posY + self.tile_size) | |
| return self.spritesheet.crop(box) | |
| def run(self, x=0, y=0): | |
| while True: | |
| # Pygame events | |
| for event in pygame.event.get(): | |
| if event.type == pygame.QUIT: | |
| sys.exit(0) | |
| elif event.type == pygame.KEYUP: | |
| self.main(x, y) | |
| def main(self, x, y): | |
| size = self.spritesheet.size | |
| signatures = [] | |
| while True: | |
| for event in pygame.event.get(): | |
| if event.type == pygame.QUIT: | |
| sys.exit(0) | |
| pos = self.getPos(x, y) | |
| if pos[0] > size[0]: | |
| x = 0 | |
| y += 1 | |
| elif pos[1] > size[1]: | |
| break | |
| else: | |
| tile = self.getTile(x, y) | |
| signature = imagehash.average_hash(tile) | |
| if signature not in signatures: | |
| tile.save("out/{}_{}.png".format(x, y)) | |
| self.draw_image(x, y, tile) | |
| signatures.append(signature) | |
| x += 1 | |
| del tile | |
| del signatures | |
| self.done() | |
| def draw_image(self, x, y, tile): | |
| image = ImageDraw.Draw(tile) | |
| data = tile.tobytes() | |
| sprite = pygame.image.fromstring(data, tile.size, tile.mode) | |
| self.screen.blit(sprite, (x*self.tile_size, y*self.tile_size)) | |
| pygame.display.update() | |
| self.clock.tick(60) | |
| def done(self): | |
| pygame.display.set_caption(self.imageName + " - tilemap (Done!)") | |
| while True: | |
| for event in pygame.event.get(): | |
| if event.type == pygame.QUIT: | |
| sys.exit(0) | |
| elif event.type == pygame.KEYDOWN: | |
| if event.key == pygame.K_ESCAPE: | |
| sys.exit(0) | |
| # Tested with: | |
| # https://cdn.discordapp.com/attachments/373286097133764618/384870661908070400/pallettown.png | |
| tiler = Tiler("pallettown.png", 16) | |
| tiler.run() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment