Spaces:
Running
Running
| import requests | |
| import os | |
| import time | |
| # --- 配置 --- | |
| # 您的 API 端点基础 URL | |
| api_base_url = "https://blueskyxn-imagemagickapi-hfs.hf.space" | |
| # 转换参数: 格式/模式/设置 | |
| target_format = "avif" # avif, webp, jpeg, png, gif, heif | |
| mode = "lossless" # lossy, lossless | |
| setting = 0 # 0-100 (有损模式为质量, 无损模式为压缩速度) | |
| # 构建完整的 API URL | |
| api_url = f"{api_base_url}/convert/{target_format}/{mode}/{setting}" | |
| # 您要测试的本地图片路径 | |
| input_image_path = r"/Volumes/TP4000PRO/582434E54A64FCB0285EFABF390AC3DB.jpg" | |
| # 转换后的文件保存路径 (自动替换扩展名) | |
| output_image_path = os.path.splitext(input_image_path)[0] + f".{target_format}" | |
| # ---------------- | |
| # 检查输入文件是否存在 | |
| if not os.path.exists(input_image_path): | |
| print(f"错误: 输入文件未找到: {input_image_path}") | |
| exit() | |
| print(f"开始处理文件: {input_image_path}") | |
| try: | |
| print(f"文件大小: {os.path.getsize(input_image_path)/1024/1024:.2f} MB") | |
| except OSError as e: | |
| print(f"无法访问文件: {e}") | |
| exit() | |
| start_time = time.time() | |
| # 准备上传的文件 | |
| # 键 "file" 必须与您 main.py 中 FastAPI 的参数名一致 | |
| # (file: UploadFile = File(...)) | |
| file_handle = open(input_image_path, "rb") | |
| files = { | |
| "file": ( | |
| os.path.basename(input_image_path), # 发送原始文件名 | |
| file_handle, # 文件句柄 | |
| "image/jpeg" # 文件的 MIME 类型 | |
| ) | |
| } | |
| try: | |
| # 发送 POST 请求 | |
| print(f"正在发送请求到 Magick API: {api_url}") | |
| # 注意:这个端点不需要 "data" 参数,只需要 "files" | |
| response = requests.post(api_url, files=files) | |
| # --- 处理响应 --- | |
| if response.status_code == 200: | |
| # 检查返回的是否是目标格式的图像 | |
| expected_content_type = f'image/{target_format}' | |
| if target_format == 'jpeg': | |
| expected_content_type = 'image/jpeg' | |
| actual_content_type = response.headers.get('content-type') | |
| if actual_content_type == expected_content_type or actual_content_type.startswith('image/'): | |
| # 保存处理后的图像 | |
| with open(output_image_path, "wb") as f: | |
| f.write(response.content) | |
| end_time = time.time() | |
| print("\n--- 转换成功! ---") | |
| print(f"总耗时: {end_time - start_time:.2f} 秒") | |
| print(f"结果已保存到: {output_image_path}") | |
| print(f"输出文件大小: {os.path.getsize(output_image_path)/1024/1024:.2f} MB") | |
| else: | |
| print(f"处理失败! 服务器返回了 200 OK,但内容类型不匹配。") | |
| print(f"期望的内容类型: {expected_content_type}") | |
| print(f"返回的内容类型: {actual_content_type}") | |
| print(f"响应内容 (前500字节): {response.text[:500]}...") | |
| else: | |
| # --- 处理错误 --- | |
| print(f"\n--- 处理失败! ---") | |
| print(f"状态码: {response.status_code}") | |
| try: | |
| # 尝试解析 FastAPI 返回的 JSON 错误详情 | |
| error_details = response.json() | |
| print(f"错误详情: {error_details.get('detail', '无详情')}") | |
| except requests.exceptions.JSONDecodeError: | |
| # 如果返回的不是 JSON (例如 502 Bad Gateway) | |
| print(f"响应内容 (前500字节): {response.text[:500]}...") | |
| finally: | |
| # 确保关闭文件句柄 | |
| file_handle.close() | |
| print("\n测试完成。") |