#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys from PIL import Image, ImageChops, ImageDraw, ImagePalette if sys.platform == "linux" or sys.platform == "linux2": from Xlib import display, X # take screen images, that's not the best way, so here # we use directly use xlib to take the screenshot. class ImageGrab(): def grab(): dsp = display.Display() root = dsp.screen().root geom = root.get_geometry() w = geom.width h = geom.height raw = root.get_image(0, 0, w ,h, X.ZPixmap, 0xffffffff) image = Image.frombytes("RGB", (w, h), raw.data, "raw", "BGRX") return image elif sys.platform == "darwin": import Quartz.CoreGraphics as CG class ImageGrab(): def grab(): screenshot = CG.CGWindowListCreateImage(CG.CGRectInfinite, CG.kCGWindowListOptionOnScreenOnly, CG.kCGNullWindowID, CG.kCGWindowImageDefault) width = CG.CGImageGetWidth(screenshot) height = CG.CGImageGetHeight(screenshot) bytesperrow = CG.CGImageGetBytesPerRow(screenshot) pixeldata = CG.CGDataProviderCopyData(CG.CGImageGetDataProvider(screenshot)) i = Image.frombytes("RGBA", (width, height), pixeldata) (b, g, r, x) = i.split() i = Image.merge("RGBX", (r, g, b, x)) return i else: from PIL import ImageGrab thickarrow_strings = ( #sized 24x24 "XX ", "XXX ", "XXXX ", "XX.XX ", "XX..XX ", "XX...XX ", "XX....XX ", "XX.....XX ", "XX......XX ", "XX.......XX ", "XX........XX ", "XX........XXX ", "XX......XXXXX ", "XX.XXX..XX ", "XXXX XX..XX ", "XX XX..XX ", " XX..XX ", " XX..XX ", " XX..XX ", " XXXX ", " XX ", " ", " ", " ") buf = "" for x in thickarrow_strings: buf += x i = Image.frombytes("I", (24,24), str.encode(buf)) print(i) i.show()