24 lines
971 B
Python
24 lines
971 B
Python
"""Prepare Android screenshots for model input without changing device coordinates."""
|
|
|
|
from io import BytesIO
|
|
|
|
from PIL import Image
|
|
|
|
|
|
def limit_screenshot_long_edge(image_bytes: bytes, max_long_edge: int) -> bytes:
|
|
"""Downscale oversized screenshots; keep smaller images byte-for-byte unchanged."""
|
|
try:
|
|
with Image.open(BytesIO(image_bytes)) as image:
|
|
long_edge = max(image.size)
|
|
if long_edge <= max_long_edge:
|
|
return image_bytes
|
|
scale = max_long_edge / long_edge
|
|
size = tuple(max(1, round(side * scale)) for side in image.size)
|
|
resized = image.convert("RGB").resize(size, Image.Resampling.LANCZOS)
|
|
output = BytesIO()
|
|
resized.save(output, format="JPEG", quality=80, optimize=True)
|
|
return output.getvalue()
|
|
except OSError:
|
|
# Preserve the capture path's previous behavior for invalid placeholder images.
|
|
return image_bytes
|