mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 16:07:30 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #
 | |
| # The Python Imaging Library
 | |
| # $Id$
 | |
| #
 | |
| # screen grabber (macOS and Windows only)
 | |
| #
 | |
| # History:
 | |
| # 2001-04-26 fl  created
 | |
| # 2001-09-17 fl  use builtin driver, if present
 | |
| # 2002-11-19 fl  added grabclipboard support
 | |
| #
 | |
| # Copyright (c) 2001-2002 by Secret Labs AB
 | |
| # Copyright (c) 2001-2002 by Fredrik Lundh
 | |
| #
 | |
| # See the README file for information on usage and redistribution.
 | |
| #
 | |
| 
 | |
| from PIL import Image
 | |
| 
 | |
| import sys
 | |
| if sys.platform not in ["win32", "darwin"]:
 | |
|     raise ImportError("ImageGrab is macOS and Windows only")
 | |
| 
 | |
| if sys.platform == "win32":
 | |
|     grabber = Image.core.grabscreen
 | |
| elif sys.platform == "darwin":
 | |
|     import os
 | |
|     import tempfile
 | |
|     import subprocess
 | |
| 
 | |
| 
 | |
| def grab(bbox=None):
 | |
|     if sys.platform == "darwin":
 | |
|         fh, filepath = tempfile.mkstemp('.png')
 | |
|         os.close(fh)
 | |
|         subprocess.call(['screencapture', '-x', filepath])
 | |
|         im = Image.open(filepath)
 | |
|         im.load()
 | |
|         os.unlink(filepath)
 | |
|     else:
 | |
|         size, data = grabber()
 | |
|         im = Image.frombytes(
 | |
|             "RGB", size, data,
 | |
|             # RGB, 32-bit line padding, origin lower left corner
 | |
|             "raw", "BGR", (size[0]*3 + 3) & -4, -1
 | |
|             )
 | |
|     if bbox:
 | |
|         im = im.crop(bbox)
 | |
|     return im
 | |
| 
 | |
| 
 | |
| def grabclipboard():
 | |
|     if sys.platform == "darwin":
 | |
|         fh, filepath = tempfile.mkstemp('.jpg')
 | |
|         os.close(fh)
 | |
|         commands = [
 | |
|             "set theFile to (open for access POSIX file \""+filepath+"\" with write permission)",
 | |
|             "try",
 | |
|                 "write (the clipboard as JPEG picture) to theFile",
 | |
|             "end try",
 | |
|             "close access theFile"
 | |
|         ]
 | |
|         script = ["osascript"]
 | |
|         for command in commands:
 | |
|             script += ["-e", command]
 | |
|         subprocess.call(script)
 | |
| 
 | |
|         im = None
 | |
|         if os.stat(filepath).st_size != 0:
 | |
|             im = Image.open(filepath)
 | |
|             im.load()
 | |
|         os.unlink(filepath)
 | |
|         return im
 | |
|     else:
 | |
|         debug = 0  # temporary interface
 | |
|         data = Image.core.grabclipboard(debug)
 | |
|         if isinstance(data, bytes):
 | |
|             from PIL import BmpImagePlugin
 | |
|             import io
 | |
|             return BmpImagePlugin.DibImageFile(io.BytesIO(data))
 | |
|         return data
 |