coverImg_wcoffice_2025515173451

Cloudflare R2 不像国内的对象存储提供了免费的图片缩放功能,他们的图片处理是另外收费的。使用开源项目imageproxy可以实现完美的图片缩放服务

项目地址 https://github.com/willnorris/imageproxy

docker compose配置


version: '3'  # Docker Compose 文件格式版本  
  
services:  
  # imageproxy 服务主配置  
  imageproxy:  
    image: ghcr.io/willnorris/imageproxy  # 来自 GitHub Container Registry 的官方镜像  
    ports:  
      - "8080:8080"  # 将容器的 8080 端口映射到主机的 8080 端口  
    environment:  
      # 将服务器绑定到所有网络接口的 8080 端口  
      - IMAGEPROXY_ADDR=0.0.0.0:8080  
        
      # 配置两级缓存系统:  
      # 1. 第一级:200MB 内存缓存,缓存项最多保存 6 小时  
      # 2. 第二级:基于 /cache 目录的磁盘缓存  
      - "IMAGEPROXY_CACHE=memory:200:6h /cache"  
        
      # 安全设置:限制可以代理的远程主机  
      # 只处理来自这些域名的图像,如不限制可用*  
      - IMAGEPROXY_ALLOWHOSTS=example.com,example.org  
        
      # 限制接受的内容类型  
      # 只处理 image/* MIME 类型  
      - IMAGEPROXY_CONTENTYPES=image/*  
        
      # 设置请求超时为 30 秒  
      # 超过此时间的请求将返回 504 网关超时错误  
      - IMAGEPROXY_TIMEOUT=30s  
        
      # 启用详细日志记录,便于调试  
      - IMAGEPROXY_VERBOSE=true  
      
    volumes:  
      # 将本地 ./cache 目录映射到容器内的 /cache 目录  
      # 这样可以在容器重启后保留磁盘缓存  
      - ./cache:/cache  
      
    # 除非手动停止,否则容器会自动重启  
    restart: unless-stopped

基本使用

指定宽度,保持比例:
/200x/https://example.com/image.jpg

指定高度,保持比例:
/x150/https://example.com/image.jpg

指定宽度和高度(裁剪):
/100x150/https://example.com/image.jpg

正方形裁剪:
/100/https://example.com/image.jpg

功能介绍

核心图像处理功能

  • 裁剪功能 - 支持矩形裁剪,可以通过cx、cy、cw、ch参数指定裁剪区域
  • 智能裁剪 - 基于图像内容自动寻找最佳裁剪点
  • 调整大小 - 支持按像素或百分比调整图像尺寸
  • 旋转 - 支持90°、180°、270°旋转
  • 翻转 - 支持水平和垂直翻转
  • 适应模式 - 在不裁剪的情况下调整图像大小以适应指定尺寸
  • 质量调整 - 可以指定JPEG图像的质量百分比
  • 格式转换 - 支持JPEG、PNG和TIFF格式之间的转换
  • 边缘裁剪 - 自动裁剪图像边缘的相同颜色像素

缓存系统

  • 内存缓存 - 使用内存LRU缓存存储处理后的图像
  • 磁盘缓存 - 将处理后的图像缓存到本地磁盘
  • 云存储缓存 - 支持多种云存储服务:

    • Amazon S3 - 支持S3兼容的存储服务
    • Google Cloud Storage - 支持GCS存储
    • Azure Storage - 支持Azure存储
  • Redis缓存 - 支持使用Redis进行缓存
  • 多级缓存 - 支持配置多个缓存层级

安全功能

  • 主机白名单 - 限制只能从特定主机获取图像
  • 主机黑名单 - 禁止从特定主机获取图像
  • 引用站点限制 - 限制只允许特定引用站点的请求
  • 请求签名 - 使用HMAC-SHA256签名验证请求
  • 密钥轮换 - 支持多个签名密钥以实现密钥轮换

部署选项

  • 命令行工具 - 作为独立的命令行应用程序运行
  • Docker部署 - 支持Docker容器部署
  • Caddy模块 - 作为Caddy Web服务器的模块运行

其他功能

  • 默认基础URL - 支持相对于基础URL的图像路径
  • 放大选项 - 可选择是否允许图像放大超过原始尺寸
  • WebP支持 - 支持WebP图像解码
  • TIFF支持 - 支持TIFF图像格式
  • GIF动画支持 - 支持处理动态GIF图像
  • 详细日志 - 可选的详细日志记录
  • 自定义User-Agent - 可以设置代理请求的User-Agent
  • 请求头传递 - 可以将指定的请求头从入站请求传递到代理服务器
  • 请求超时 - 可以设置请求的超时时间
  • 重定向控制 - 可以控制是否跟随重定向

发表评论