diff options
| author | yum <yum.food.vr@gmail.com> | 2022-12-17 17:51:12 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2022-12-17 17:51:12 -0800 |
| commit | ee8213d1d2c2008d2d996929500c9e87dac325a3 (patch) | |
| tree | f5fb3da0fea10a30229c3642c4312fd457ac293a /emotes.py | |
| parent | 4d836989720523cd0363927e3e066f56b9dc445c (diff) | |
Finish python virtual env
GUI can now download all TaSTT dependencies and install them into a
virtual environment.
* Add buttons to check embedded python version & install dependencies
* Add class to wrap interacting with embedded Python
* Put all TaSTT python scripts into a folder
Diffstat (limited to 'emotes.py')
| -rw-r--r-- | emotes.py | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/emotes.py b/emotes.py deleted file mode 100644 index b922fdf..0000000 --- a/emotes.py +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env python3 - -import argparse -from math import floor -import os -# python3 -m pip install pillow -from PIL import Image -import sys - -# (row, col) -TEX_SZ = (2048, 2048) - -IMG_SZ_PX = 256 -IMG_PER_ROW = int(TEX_SZ[0] / IMG_SZ_PX) -IMG_PER_COL = int(TEX_SZ[1] / IMG_SZ_PX) - -# TODO(yum) this should live in a config file. -# Note: the name of the emote must be no longer than 6 characters. -IMG_TEX_DATA = [] -IMG_TEX_DATA.append(("Images/Emotes/xdd.png", "xdd")) -IMG_TEX_DATA.append(("Images/Emotes/pog.png", "pog")) -IMG_TEX_DATA.append(("Images/Emotes/lulw.png", "laugh")) -IMG_TEX_DATA.append(("Images/Emotes/bighardo.png", "hard")) -IMG_TEX_DATA.append(("Images/Emotes/peepoHappy.png", "happy")) -IMG_TEX_DATA.append(("Images/Emotes/peepoSad.png", "sad")) -IMG_TEX_DATA.append(("Images/Emotes/bedge.png", "bed")) -IMG_TEX_DATA.append(("Images/Emotes/reallymad.png", "mad")) -IMG_TEX_DATA.append(("Images/Emotes/clueless.png", "surely")) -IMG_TEX_DATA.append(("Images/Emotes/what.png", "what")) -IMG_TEX_DATA.append(("Images/Emotes/based.png", "based")) -IMG_TEX_DATA.append(("Images/Emotes/chad.png", "chad")) -IMG_TEX_DATA.append(("Images/Emotes/aware.png", "aware")) -IMG_TEX_DATA.append(("Images/Emotes/girl.png", "girl")) - -IMG_TEX_KEYWORD_TO_COORD = {} -for i in range(0, len(IMG_TEX_DATA)): - IMG_TEX_KEYWORD_TO_COORD[IMG_TEX_DATA[i][1]] = i - -# We treat images like words. To keep things simple, they're the same height as -# a word, and they're a fixed width. -IMG_SZ_LETTER_ROWS = 1 -IMG_SZ_LETTER_COLS = 6 - -def lookup(word: str): - word = word.lower() - word = ''.join(c for c in word.lower() if c.isalpha()) - if word in IMG_TEX_KEYWORD_TO_COORD.keys(): - return word, IMG_TEX_KEYWORD_TO_COORD[word] - return None, None - -def openTexture(tex_path: str): - if not os.path.exists(args.texture_path): - return Image.new("RGB", TEX_SZ) - tex = Image.open(args.texture_path) - if tex.size != TEX_SZ: - print("Texture at {} has mismatching size {}, creating new texture".format( - tex_path, tex.size), file=sys.stderr) - return Image.new("RGB", TEX_SZ) - return tex - -# Add an image to the texture at the coordinates (x, y). x and y should be in -# the range [0, IMG_PER_COL) and [0, IMG_PER_ROW) respectively. -def addImageToTexture(tex: Image, img_path: str, x: int, y:int): - # Transparent images will be composited on top of a black background. - img = Image.open(img_path).convert('RGBA') - img_bg = Image.new('RGBA', img.size, (0, 0, 0)) - img = Image.alpha_composite(img_bg, img).convert('RGB') - - max_px = IMG_SZ_PX - - # Scale the image up so it uses as much space as is given to it. - # I originally planned to support multiple scales, but this proved to be - # too much work - getting line wrapping to work with this would be a pain. - # So for now, all images are the same height as words. - scale = 1 - img_x, img_y = img.size - max_dim = max(img_x, img_y) - img_scale = (max_px / max_dim) * scale - new_sz = (int(floor(img.size[0] * img_scale)), - int(floor(img.size[1] * img_scale))) - print("Add image {}".format(img_path)) - print(" Original size: {}".format(img.size)) - print(" Scaled size: {}".format(new_sz)) - img = img.resize(new_sz) - - # Center the image within its new coordinate space. - padded_img_sz = (IMG_SZ_PX * scale, IMG_SZ_PX * scale) - padded_img = Image.new("RGB", padded_img_sz) - centered_x = int(floor((padded_img_sz[0] - new_sz[0]) / 2)) - centered_y = int(floor((padded_img_sz[1] - new_sz[1]) / 2)) - padded_img.paste(img, box=(centered_x, centered_y)) - img = padded_img - - # Break the image into tiles and write them into the texture. - for slot in range(0, scale * scale): - tile_x = slot % scale - tile_y = int(floor(slot / scale)) - tile_bbox = (tile_x * IMG_SZ_PX, tile_y * IMG_SZ_PX, (tile_x + 1) * IMG_SZ_PX, (tile_y + 1) * IMG_SZ_PX) - tile = img.crop(tile_bbox) - print(" tile {},{} (bbox={})".format(tile_x, tile_y, tile_bbox)) - - slot_x = x + slot % IMG_PER_ROW - slot_y = y + int(floor(slot / IMG_PER_ROW)) - slot_x_px = slot_x * IMG_SZ_PX - slot_y_px = slot_y * IMG_SZ_PX - print(" Add img at {},{} (px {},{})".format(slot_x, slot_y, slot_x_px, slot_y_px)) - - tex.paste(tile, box=(slot_x_px, slot_y_px)) - -def parseArgs(): - parser = argparse.ArgumentParser() - parser.add_argument("--texture_path", type=str, help="Path to save the generated texture.") - args = parser.parse_args() - - if not args.texture_path: - args.texture_path = "img_texture.png" - - return args - -if __name__ == "__main__": - args = parseArgs() - - tex = openTexture(args.texture_path) - for i in range(0, len(IMG_TEX_DATA)): - filename = IMG_TEX_DATA[i][0] - x = i % IMG_PER_ROW - y = int(floor(i / IMG_PER_ROW)) - addImageToTexture(tex, filename, x, y) - tex.save(args.texture_path) - |
