Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.97 KB | None | 0 0
  1. import StreamDeck as StreamDeck
  2. import threading
  3. import random
  4. from PIL import Image
  5. import io
  6.  
  7. from os import listdir
  8.  
  9.  
  10. def get_key_image(filename: str):
  11.     output = io.BytesIO()
  12.     image = Image.open(filename)
  13.     image.thumbnail((72, 72))
  14.  
  15.     img_w, img_h = image.size
  16.     background = Image.new('RGBA', (72, 72), (0, 0, 0, 255))
  17.     bg_w, bg_h = background.size
  18.     offset = ((bg_w - img_w) // 2, (bg_h - img_h) // 2)
  19.     background.paste(image, offset)
  20.     background = background.rotate(180)
  21.  
  22.     background.convert('RGB').save(output, 'BMP')
  23.     return output.getvalue()[54:]
  24.  
  25.  
  26. def get_key_alt_image(filename):
  27.     output = io.BytesIO()
  28.     image = Image.frombytes("RGB", (72, 72), filename)
  29.     image.thumbnail((50, 50))
  30.     b, g, r = image.split()
  31.     image = Image.merge("RGB", (r, g, b))
  32.  
  33.     img_w, img_h = image.size
  34.     background = Image.new('RGBA', (72, 72), (0, 0, 0, 255))
  35.     bg_w, bg_h = background.size
  36.     offset = ((bg_w - img_w) // 2, (bg_h - img_h) // 2)
  37.     background.paste(image, offset)
  38.     background = background.rotate(180)
  39.     background = background.transpose(Image.FLIP_LEFT_RIGHT)
  40.  
  41.     background.convert('RGB').save(output, 'BMP')
  42.     return output.getvalue()[54:]
  43.  
  44.  
  45. def get_key_full_image(filename):
  46.     image_list = []
  47.     image = Image.open(filename)
  48.     size = 72 * 5, 72 * 3
  49.     image.thumbnail(size)
  50.     img_w, img_h = image.size
  51.     background = Image.new('RGBA', (size), (0, 0, 0, 255))
  52.     bg_w, bg_h = background.size
  53.     offset = ((bg_w - img_w) // 2, (bg_h - img_h) // 2)
  54.     background.paste(image, offset)
  55.     background = background.rotate(180)
  56.  
  57.     for rows in range(0, 3):
  58.         for columns in range(0, 5):
  59.             crop_size = 72
  60.             output = io.BytesIO()
  61.             x = img_w - ((5 - columns) * crop_size)
  62.             y = (2 - rows) * crop_size
  63.             box = (x, y, x + crop_size, y + crop_size)
  64.             key_image = background.crop(box)
  65.             key_image.convert('RGB').save(output, 'BMP')
  66.             image_list.append(output.getvalue()[54:])
  67.  
  68.     return image_list
  69.  
  70.  
  71. def key_change_callback(deck, key, state):
  72.     print(f"Key {key} = {state}")
  73.     if state:
  74.         deck.set_key_image(key, key_alt_images[key])
  75.     else:
  76.         deck.set_key_image(key, key_images[key])
  77.  
  78.  
  79. key_images = []
  80. #key_images = get_key_full_image('full.png')
  81. key_alt_images = []
  82. for k in range(15):
  83.     key_images.append(get_key_image(f"icons\{random.choice(listdir('icons'))}"))
  84.     key_alt_images.append(get_key_alt_image(key_images[k]))
  85.  
  86.  
  87. if __name__ == "__main__":
  88.     streamdeck = StreamDeck.DeviceManager().enumerate()[0]
  89.     streamdeck.open()
  90.     streamdeck.reset()
  91.  
  92.     streamdeck.set_brightness(100)
  93.  
  94.     for k in range(streamdeck.key_count()):
  95.         streamdeck.set_key_image(k, key_images[k])
  96.  
  97.     streamdeck.set_key_callback(key_change_callback)
  98.  
  99.     for t in threading.enumerate():
  100.         if t is threading.currentThread():
  101.             continue
  102.  
  103.         t.join()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement