OSS 流量费太贵,杜老师自建 MinIO,但 MinIO 不支持图片处理,找了一圈发现了 imgproxy,借此对接 MinIO 可实现图片处理。imgproxy 是一个快速安全的独立服务器,用于调整图像大小、处理、转换图像。
imgproxy 能够快速轻松地动态调整图像大小,且它装备精良,可处理大量的图像大小调整。
imgproxy 是 Web 应用程序中所有图像大小调整代码的快速及安全的替代品。
它也是处理来自远程源的图像不可或缺的工具。
使用 imgproxy 则无需在每次更改时都重复准备图像以适合设计。
速度:
安全:
将下面的内容保存为 docker-compose.yml
,并执行 docker compose up -d
启用服务:
1 | services: |
针对配置文件内的参数说明如下:
参数 | 说明 |
---|---|
IMGPROXY_USE_S3 | 是否要启用 S3 |
AWS_ACCESS_KEY_ID | S3 的访问密钥 |
AWS_SECRET_ACCESS_KEY | S3 的访问密钥 |
IMGPROXY_S3_REGION | S3 的区域 |
IMGPROXY_S3_ENDPOINT | S3 的端点 |
IMGPROXY_S3_MULTI_REGION | 是否要开启多区域 |
如需开启水印功能,则将以下环境变量添加至 docker-compose.yml
:
参数 | 说明 |
---|---|
IMGPROXY_WATERMARK_DATA | Base64 编码的图像数据,可以使用 base64 watermark.webp |
IMGPROXY_WATERMARK_PATH | 本地存储映像路径。 |
IMGPROXY_WATERMARK_URL | 水印图片网址。 |
IMGPROXY_WATERMARK_OPACITY | 水印的透明度。 |
用以下格式构建请求 URL,将相关参数替换为实际的值:
1 | <imgproxy_base_url>?url=<MinIO_storage_url>/<image_path>&watermark=<watermark_image_path> |
针对上面相关参数解释如下:
参数 | 说明 | 举例 |
---|---|---|
<imgproxy_base_url> | 是 imgproxy 的基础 URL | http://your_domain/imgproxy/ |
<MinIO_storage_url> | 是 MinIO 存储的 URL | http://minio_host:9000/ |
<image_path> | 要添加水印的原始图片在 MinIO 中的路径 | bucketname/objectname.jpg |
<watermark_image_path> | 是水印图片的路径 | watermark.png |
例如,如果 imgproxy 基础 URL 是 http://example.com/imgproxy/
,MinIO 存储 URL 是 http://minio.example.com/
,要添加水印的图片在 MinIO 中的路径是 mybucket/myimage.jpg
,水印图片路径是 watermark.png
,那么完整请求 URL 可能是:
1 | http://example.com/imgproxy/?url=http://minio.example.com/mybucket/myimage.jpg&watermark=watermark.png |