screenshare/venv/lib/python3.12/site-packages/pyscreenshot/__init__.py
2024-11-29 18:15:30 +00:00

55 lines
1.6 KiB
Python

import logging
from typing import List, Optional, Tuple
from PIL import Image
from pyscreenshot.about import __version__
from pyscreenshot.childproc import childprocess_backend_version
from pyscreenshot.loader import FailedBackendError, backend_dict, backend_grab
ADDITIONAL_IMPORTS = [FailedBackendError]
log = logging.getLogger(__name__)
log.debug("version=%s", __version__)
def grab(
bbox: Optional[Tuple[int, int, int, int]] = None,
childprocess: bool = True,
backend: Optional[str] = None,
) -> "Image":
"""Copy the contents of the screen to PIL image memory.
:param bbox: optional bounding box (x1,y1,x2,y2)
:param childprocess: run back-end in new process using popen. (bool)
This isolates back-ends from each other and from main process.
Leave it as it is (True) to have a safe setting.
Set it False to improve performance, but then conflicts are possible.
:param backend: back-end can be forced if set (examples:scrot, wx,..),
otherwise back-end is automatic
"""
if bbox:
x1, y1, x2, y2 = bbox
if x2 <= x1:
raise ValueError("bbox x2<=x1")
if y2 <= y1:
raise ValueError("bbox y2<=y1")
return backend_grab(backend, bbox, childprocess)
def backends() -> List[str]:
"""Back-end names as a list.
:return: back-ends as string list
"""
return list(backend_dict.keys())
def backend_version(backend: str) -> str:
"""Back-end version.
:param backend: back-end (examples:scrot, wx,..)
:return: version as string
"""
return childprocess_backend_version(backend)