WechatOnCloud/bridge/woc_bridge/routes/screenshot.py

42 lines
1.5 KiB
Python
Raw Normal View History

from __future__ import annotations
import logging
from fastapi import APIRouter
from fastapi.responses import Response
from woc_bridge.config import _require_qr_capture
logger = logging.getLogger("woc-bridge")
router = APIRouter()
# ---------------------------------------------------------------------------
# 路由POST /api/screenshot
# ---------------------------------------------------------------------------
@router.post("/api/screenshot")
async def screenshot() -> Response:
"""截取完整屏幕并返回 PNG。
用于前端截图按钮 / 调试时观察微信实际界面状态如确认 UI 操作是否
触发了正确的对话框截取整个 X 桌面DISPLAY _state.config.display 指定
Returns:
ResponseContent-Type=image/pngbody PNG 二进制
Raises:
BridgeError(WINDOW_NOT_FOUND): X 会话未就绪无法截图HTTP 503
其他异常由全局兜底处理器返回 BRIDGE_INTERNAL_ERROR
Notes:
- 截图由 qr_capture.capture_full_screenshot 完成底层调
xdotool/getwindowgeometry + importImageMagick
- /api/login/qr/start 区别本接口截全屏qr/start 截二维码区域
- 大屏幕截图可能 > 1MB调用方注意带宽
"""
qr_capture = _require_qr_capture()
png_bytes = await qr_capture.capture_full_screenshot()
logger.info("screenshot: → 截图成功 %d bytes", len(png_bytes))
return Response(content=png_bytes, media_type="image/png")