diff --git a/app/tool/image_download.py b/app/tool/image_download.py new file mode 100644 index 0000000..d0c19cc --- /dev/null +++ b/app/tool/image_download.py @@ -0,0 +1,36 @@ +"""图片下载工具。 + +把图片 URL 下载成字节流,供 OCR(app.tool.ocr)与二维码识别 +(app.tool.cv / app.tool.qr_decode)直接消费,不落盘。 +""" + +from __future__ import annotations + +import httpx + +from app.core.logger import log + +# 请求超时(秒) +_TIMEOUT = 20 + + +def download_image(url: str) -> bytes | None: + """下载图片。 + + Args: + url: 图片地址。 + + Returns: + 图片字节流;下载失败时返回 None。 + """ + if not url or not url.startswith("http"): + return None + + try: + with httpx.Client(timeout=_TIMEOUT, follow_redirects=True) as client: + response = client.get(url) + response.raise_for_status() + return response.content or None + except httpx.HTTPError as exc: + log.warning(f"图片下载失败: {url} | {exc}") + return None