Source code for bibliopixel.util.image.load_image

from ... colors import COLORS
from ... colors.arithmetic import color_scale
from ... layout.matrix import Matrix


[docs]def show_image(setter, width, height, image_path='', image_obj=None, offset=(0, 0), bgcolor=COLORS.Off, brightness=255): """Display an image on a matrix.""" bgcolor = color_scale(bgcolor, brightness) img = image_obj if image_path and not img: from PIL import Image img = Image.open(image_path) elif not img: raise ValueError('Must provide either image_path or image_obj') w = min(width - offset[0], img.size[0]) h = min(height - offset[1], img.size[1]) ox = offset[0] oy = offset[1] for x in range(ox, w + ox): for y in range(oy, h + oy): r, g, b, a = (0, 0, 0, 255) rgba = img.getpixel((x - ox, y - oy)) if isinstance(rgba, int): raise ValueError('Image must be in RGB or RGBA format!') if len(rgba) == 3: r, g, b = rgba elif len(rgba) == 4: r, g, b, a = rgba else: raise ValueError('Image must be in RGB or RGBA format!') if a == 0: r, g, b = bgcolor else: r, g, b = color_scale((r, g, b), a) if brightness != 255: r, g, b = color_scale((r, g, b), brightness) setter(x, y, (r, g, b))
[docs]def showImage(layout, imagePath="", imageObj=None, offset=(0, 0), bgcolor=COLORS.Off, brightness=255): """Display an image on the matrix""" if not isinstance(layout, Matrix): raise RuntimeError("Must use Matrix with showImage!") layout.all_off() return show_image(layout.set, layout.width, layout.height, imagePath, imageObj, offset, bgcolor, brightness)
[docs]def loadImage(layout, imagePath="", imageObj=None, offset=(0, 0), bgcolor=COLORS.Off, brightness=255): """Display an image on the matrix""" if not isinstance(layout, Matrix): raise RuntimeError("Must use Matrix with loadImage!") texture = [[COLORS.Off for x in range(layout.width)] for y in range(layout.height)] def setter(x, y, pixel): if y >= 0 and x >= 0: texture[y][x] = pixel show_image(setter, layout.width, layout.height, imagePath, imageObj, offset, bgcolor, brightness) return texture