基于 optimize-images 的 HTTP 服务,用于优化图片。
- ✅ 支持多种图片格式(JPEG, PNG, WebP, GIF)
- ✅ 自动图片优化,减小文件大小
- ✅ 异步处理,高性能
- ✅ 自动生成 API 文档(Swagger UI)
- ✅ 类型安全,参数验证
- ✅ 错误处理和日志记录
pip install -r requirements.txt# 激活虚拟环境(如果使用虚拟环境)
source venv/bin/activate # Linux/Mac
# 或
venv\Scripts\activate # Windows
# 开发模式(支持热重载)
# 确保在项目根目录运行
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# 生产模式
uvicorn app.main:app --host 0.0.0.0 --port 8000
# 或者使用 Python 模块方式运行(推荐)
python -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000服务启动后,访问以下地址:
- API 文档(Swagger UI): http://localhost:8000/docs
- API 文档(ReDoc): http://localhost:8000/redoc
- 健康检查: http://localhost:8000/health
优化上传的图片文件。
使用 curl:
curl -X POST "http://localhost:8000/optimize" \
-F "image=@/path/to/your/image.jpg" \
--output optimized_image.jpg使用 Python requests:
import requests
url = "http://localhost:8000/optimize"
files = {"image": open("image.jpg", "rb")}
response = requests.post(url, files=files)
if response.status_code == 200:
with open("optimized_image.jpg", "wb") as f:
f.write(response.content)
print("图片优化成功!")使用 JavaScript fetch:
const formData = new FormData();
formData.append('image', fileInput.files[0]);
fetch('http://localhost:8000/optimize', {
method: 'POST',
body: formData
})
.then(response => {
if (!response.ok) throw new Error('优化失败');
return response.blob();
})
.then(blob => {
const url = URL.createObjectURL(blob);
// 使用优化后的图片
const img = document.createElement('img');
img.src = url;
document.body.appendChild(img);
});- 成功 (200): 返回优化后的图片二进制数据
- 错误 (400): 请求参数错误(如文件过大)
- 错误 (422): 文件格式不支持
- 错误 (500): 服务器内部错误
optimize-images-http/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI 应用入口
│ └── optimize.py # 图片优化逻辑
├── requirements.txt # 项目依赖
├── README.md # 项目说明
└── optimize-images-http.md # 详细文档
- FastAPI: 现代、快速的 Web 框架
- Uvicorn: ASGI 服务器
- optimize-images: 图片优化库
- Pillow: 图片处理库
- 最大文件大小: 30MB
- 支持的格式: JPEG, PNG, WebP, GIF
app/main.py: FastAPI 应用主文件,定义路由和请求处理app/optimize.py: 图片优化逻辑,封装 optimize-images 库
- 在
app/optimize.py中添加优化逻辑 - 在
app/main.py中添加新的路由端点 - 更新文档
MIT