IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    使用 imgproxy 对接 MinIO 实现图片处理

    Teacher Du发表于 2024-06-22 16:39:53
    love 0

    OSS 流量费太贵,杜老师自建 MinIO,但 MinIO 不支持图片处理,找了一圈发现了 imgproxy,借此对接 MinIO 可实现图片处理。imgproxy 是一个快速安全的独立服务器,用于调整图像大小、处理、转换图像。

    介绍

    imgproxy 能够快速轻松地动态调整图像大小,且它装备精良,可处理大量的图像大小调整。

    imgproxy 是 Web 应用程序中所有图像大小调整代码的快速及安全的替代品。

    它也是处理来自远程源的图像不可或缺的工具。

    使用 imgproxy 则无需在每次更改时都重复准备图像以适合设计。

    特点

    速度:

    1. imgproxy 利用了可能是目前最有效的图像处理库。它的速度很快,且内存占用非常低;
    2. imgproxy 使用 Go 的原生包在处理请求时省略任何开销,并且提供最好的 HTTP 支持。

    安全:

    1. imgproxy 使用签名保护图像 URL,因此攻击者无法通过请求多次调整图像大小来实施拒绝服务攻击;
    2. imgproxy 支持通过 HTTP 标头进行授权,这可防止攻击者直接使用 imgproxy,但允许通过 CDN 或者缓存服务器使用它。

    安装

    将下面的内容保存为 docker-compose.yml,并执行 docker compose up -d 启用服务:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    services:
    imgproxy:
    image: darthsim/imgproxy:latest
    ports:
    - "8080:8080"
    environment:
    - IMGPROXY_USE_S3=true
    - AWS_ACCESS_KEY_ID=my_access_key
    - AWS_SECRET_ACCESS_KEY=my_secret_key
    - IMGPROXY_S3_REGION=us-west-1
    - IMGPROXY_S3_ENDPOINT=
    - IMGPROXY_S3_MULTI_REGION=true

    针对配置文件内的参数说明如下:

    参数说明
    IMGPROXY_USE_S3是否要启用 S3
    AWS_ACCESS_KEY_IDS3 的访问密钥
    AWS_SECRET_ACCESS_KEYS3 的访问密钥
    IMGPROXY_S3_REGIONS3 的区域
    IMGPROXY_S3_ENDPOINTS3 的端点
    IMGPROXY_S3_MULTI_REGION是否要开启多区域

    水印

    如需开启水印功能,则将以下环境变量添加至 docker-compose.yml:

    参数说明
    IMGPROXY_WATERMARK_DATABase64 编码的图像数据,可以使用 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 的基础 URLhttp://your_domain/imgproxy/
    <MinIO_storage_url>是 MinIO 存储的 URLhttp://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


沪ICP备19023445号-2号
友情链接