80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
#!/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()
|
|
|
|
|