imagor

imagor

高性能图像处理服务器及Go开发库

imagor是基于libvips的高性能图像处理服务器和Go库,支持裁剪、缩放、滤镜等多种处理功能。它提供HTTP服务器和Docker支持,兼容thumbor URL语法。imagor集成了文件系统、AWS S3和Google Cloud Storage等存储适配器,满足多样化的图像处理需求。

imagor图像处理DockerlibvipsGoGithub开源项目

imagor

测试状态 覆盖率状态 Docker Hub GitHub 容器仓库 Go 参考

imagor 是一个快速、安全的图像处理服务器和 Go 库。

imagor 使用了最高效的图像处理库之一 libvips。它通常比使用最快的 ImageMagick 和 GraphicsMagick 设置快 4-8 倍。imagor 实现了 libvips 的流式处理,促进了并行处理管道,实现了高网络吞吐量。

imagor 具有大量图像处理用例,可作为 HTTP 服务器使用,并提供一流的 Docker 支持。它采用 thumbor URL 语法,是一个高性能的替代品。

imagor 是一个以速度、安全性和可扩展性为重点构建的 Go 库。此外还有 imagorvideo,通过 ffmpeg C 绑定提供视频缩略图功能。

快速开始

docker run -p 8000:8000 shumc/imagor -imagor-unsafe -imagor-auto-webp

原始图像:

https://yellow-cdn.veclightyear.com/ab5030c0/d00cfff8-87e8-4cfd-b18b-b3d15adb24cf.png
https://yellow-cdn.veclightyear.com/ab5030c0/a3cf1a5a-3d15-46b1-9b8c-751b9dd82b72.gif
https://yellow-cdn.veclightyear.com/ab5030c0/c9315c15-373a-4a80-bb73-2f021a4da807.png

<img src="https://yellow-cdn.veclightyear.com/ab5030c0/d00cfff8-87e8-4cfd-b18b-b3d15adb24cf.png" height="100" /> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/a3cf1a5a-3d15-46b1-9b8c-751b9dd82b72.gif" height="100" /> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/c9315c15-373a-4a80-bb73-2f021a4da807.png" height="100" />

尝试以下图像 URL:

http://localhost:8000/unsafe/fit-in/200x200/filters:fill(white)/https://yellow-cdn.veclightyear.com/ab5030c0/d00cfff8-87e8-4cfd-b18b-b3d15adb24cf.png
http://localhost:8000/unsafe/200x200/smart/filters:fill(white):format(jpeg):quality(80)/https://yellow-cdn.veclightyear.com/ab5030c0/d00cfff8-87e8-4cfd-b18b-b3d15adb24cf.png
http://localhost:8000/unsafe/fit-in/-180x180/10x10/filters:hue(290):saturation(100):fill(yellow)/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png
http://localhost:8000/unsafe/30x40:100x150/filters:fill(cyan)/raw.githubusercontent.com/cshum/imagor/master/testdata/dancing-banana.gif
http://localhost:8000/unsafe/fit-in/200x150/filters:fill(yellow):watermark(raw.githubusercontent.com/cshum/imagor/master/testdata/gopher-front.png,repeat,bottom,0,40,40)/raw.githubusercontent.com/cshum/imagor/master/testdata/dancing-banana.gif

<img src="https://yellow-cdn.veclightyear.com/ab5030c0/8f11b183-c8df-43e3-b16c-8f89daebcfbc.jpg" height="100" /> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/f3ab5976-bf86-40b8-89d7-777d2819fb52.jpg" height="100" /> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/3bb6b63f-8c7e-43de-b51a-d9a562d7b3b1.jpg" height="100" /> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/c8357dfc-120a-4256-b68a-a1ad0d2ad2a7.gif" height="100" /> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/903cd372-84f2-4df9-b925-c36ac4ccd34e.gif" height="100" />

图像端点

imagor 端点是一系列 URL 部分,定义了图像操作,后跟图像 URI:

/HASH|unsafe/trim/AxB:CxD/fit-in/stretch/-Ex-F/GxH:IxJ/HALIGN/VALIGN/smart/filters:NAME(ARGS):NAME(ARGS):.../IMAGE
  • HASH 是 URL 签名哈希,如果使用不安全模式则为 unsafe
  • trim 使用左上角像素颜色移除图像周围的空白
  • AxB:CxD 表示在左上角点 AxB 和右下角点 CxD 手动裁剪图像。坐标也可以提供为 0 到 1 之间的浮点值(图像尺寸的百分比)
  • fit-in 表示生成的图像不应自动裁剪,而只是适应 ExF 指定的虚拟框
  • stretch 表示将图像调整为 ExF 而不保持其纵横比
  • -Ex-F 表示将图像调整为宽度和高度为 ExF 的大小。减号表示水平和垂直翻转
  • GxH:IxJ 添加左上角填充 GxH 和右下角填充 IxJ
  • HALIGN 是裁剪的水平对齐。接受 leftrightcenter,默认为 center
  • VALIGN 是裁剪的垂直对齐。接受 topbottommiddle,默认为 middle
  • smart 表示使用智能焦点检测
  • filters 是要应用的图像过滤器操作管道,请参阅过滤器部分
  • IMAGE 是图像路径或 URI
    • 对于包含 ? 字符的图像 URI,这将干扰 URL 查询,应使用 encodeURIComponent 或等效方法进行编码

过滤器

过滤器 /filters:NAME(ARGS):NAME(ARGS):.../ 是一系列将按顺序应用于图像的图像操作。例如:

/filters:fill(white):format(jpeg)/
/filters:hue(290):saturation(100):fill(yellow):format(jpeg):quality(80)/
/filters:fill(white):watermark(raw.githubusercontent.com/cshum/imagor/master/testdata/gopher-front.png,repeat,bottom,10):format(jpeg)/

imagor 支持以下过滤器:

  • background_color(color) 设置透明图片的背景颜色
    • color 颜色名称或不带"#"字符的十六进制RGB表达式
  • blur(sigma) 对图片应用高斯模糊
  • brightness(amount) 增加或减少图片亮度
    • amount -100到100,增加或减少图片亮度的百分比
  • contrast(amount) 增加或减少图片对比度
    • amount -100到100,增加或减少图片对比度的百分比
  • fill(color) 用指定颜色填充缺失区域或透明图片:
    • color - 颜色名称或不带"#"字符的十六进制RGB表达式
      • 如果颜色是"blur" - 缺失部分用模糊的原始图片填充
      • 如果颜色是"auto" - 图片左上角像素将被选为填充颜色
      • 如果颜色是"none" - 填充将完全透明
  • focal(AxB:CxD)focal(X,Y) 为自定义变换添加焦点区域或焦点:
    • 由左上点AxB和右下点CxD的区域坐标,或一个点X,Y指定。
    • 也接受0到1之间的浮点值,表示图片尺寸的百分比。
  • format(format) 指定图片的输出格式
    • format 接受jpeg、png、gif、webp、tiff、avif、jp2
  • grayscale() 将图片转换为灰度
  • hue(angle) 增加或减少图片色相
    • angle 增加或减少色相旋转的角度
  • label(text, x, y, size, color[, alpha[, font]]) 向图片添加文本标签。可以在图片内定位,指定对齐方式,支持颜色和透明度:
    • text 文本标签,也支持URL编码的文本。
    • x 文本标签的水平位置:
      • 正数表示距左侧的位置,负数表示距右侧的位置。
      • 数字后跟"p",如20p表示按图片宽度的百分比计算值
      • leftrightcenter 分别表示左对齐、右对齐或居中
    • y 文本标签的垂直位置:
      • 正数表示距顶部的位置,负数表示距底部的位置。
      • 数字后跟"p",如20p表示按图片高度的百分比计算值
      • topbottomcenter 分别表示垂直顶部对齐、底部对齐或居中
    • size - 文本标签字体大小
    • color - 颜色名称或不带"#"字符的十六进制RGB表达式
    • alpha - 文本标签透明度,0(完全不透明)到100(完全透明)之间的数字。
    • font - 文本标签字体类型
  • max_bytes(amount) 自动降低图片质量,直到图片大小低于指定的字节数amount
  • max_frames(n) 限制要加载的最大动画帧数n
  • orient(angle) 在调整大小和裁剪之前根据角度值旋转图片
    • angle 接受0、90、180、270
  • page(num) 指定PDF的页码或动画图片的帧号,从1开始
  • dpi(num) 指定PDF和SVG的渲染DPI
  • proportion(percentage) 将图片缩放到图片尺寸的比例百分比
  • quality(amount) 更改图片的整体质量,对png无效
    • amount 0到100,质量级别的百分比
  • rgb(r,g,b) 每个RGB通道的颜色量(百分比)。范围从-100到100
  • rotate(angle) 根据角度值旋转给定的图片
    • angle 接受0、90、180、270
  • round_corner(rx [, ry [, color]]) 用指定的背景颜色为图片添加圆角
    • rxry 用作半径的像素量。如果未提供ry,则ry = rx
    • color 颜色名称或不带"#"字符的十六进制RGB表达式
  • saturation(amount) 增加或减少图片饱和度
    • amount -100到100,增加或减少图片饱和度的百分比
  • sharpen(sigma) 锐化图片
  • strip_exif() 从结果图片中删除Exif元数据
  • strip_icc() 从结果图片中删除ICC配置文件信息
  • upscale() 如果使用了fit-in,则放大图片
  • watermark(image, x, y, alpha [, w_ratio [, h_ratio]]) 向图片添加水印。可以在图片内定位,指定alpha通道,并可选择根据图片大小调整水印大小
    • image 水印图片URI,使用为imagor配置的相同图片加载器
    • x 水印的水平位置:
      • 正数表示距左侧的位置,负数表示距右侧的位置。
      • 数字后跟"p",如20p表示按图片宽度的百分比计算值
      • leftrightcenter 分别表示左侧、右侧或居中
      • repeat 水印将水平重复
    • y 水印的垂直位置:
      • 正数表示距顶部的位置,负数表示距底部的位置。
      • 数字后跟"p",如20p表示按图片高度的百分比计算值
      • topbottomcenter 分别表示顶部、底部或居中
      • repeat 水印将垂直重复
    • alpha 水印图片透明度,0(完全不透明)到100(完全透明)之间的数字。
    • w_ratio 水印应适应的图片宽度百分比
    • h_ratio 水印应适应的图片高度百分比

实用过滤器

这些过滤器不操作图片,但为imagor管道提供有用的实用工具:

  • attachment(filename)Content-Disposition头中返回附件,浏览器将打开一个"另存为"对话框,文件名为filename。当未指定filename时,imagor将从图片源获取文件名
  • expire(timestamp) 为内容添加过期时间。timestamp是Unix毫秒时间戳,例如,如果内容在30秒内有效,那么在JavaScript中timestamp将是Date.now() + 30*1000
  • preview() 即使启用了结果存储也跳过结果存储。对条件缓存有用
  • raw() 响应原始未处理和未检查的源图片。图片仍从加载器和存储加载,但跳过结果存储

加载器、存储和结果存储

imagor的加载器存储结果存储是从各种来源加载和保存图片的构建模块:

  • 加载器加载图片。在你希望从中加载图片但不修改它的地方启用加载器,例如静态目录。
  • 存储加载和保存图片。这允许后续对同一图片的请求直接从存储加载,而不是HTTP源。
  • 结果存储加载和保存处理后的图片。这允许后续使用相同参数的请求从结果存储加载,节省处理资源。

imagor提供内置适配器,支持HTTP(s)、代理、文件系统、AWS S3和Google Cloud Storage。默认情况下,HTTP加载器用作后备。你可以选择启用适合你用例的其他适配器。

文件系统

使用文件系统的Docker Compose示例,使用挂载卷:

version: "3" services: imagor: image: shumc/imagor:latest volumes: - ./:/mnt/data environment: PORT: 8000 IMAGOR_UNSAFE: 1 # 用于测试的不安全URL FILE_LOADER_BASE_DIR: /mnt/data # 通过指定基础目录启用文件加载器 FILE_STORAGE_BASE_DIR: /mnt/data # 通过指定基础目录启用文件存储 FILE_STORAGE_MKDIR_PERMISSION: 0755 # 可选 FILE_STORAGE_WRITE_PERMISSION: 0666 # 可选 FILE_RESULT_STORAGE_BASE_DIR: /mnt/data/result # 通过指定基础目录启用文件结果存储 FILE_RESULT_STORAGE_MKDIR_PERMISSION: 0755 # 可选 FILE_RESULT_STORAGE_WRITE_PERMISSION: 0666 # 可选 ports: - "8000:8000"

AWS S3

使用AWS S3的Docker Compose示例。也适用于S3兼容服务,如MinIO、DigitalOcean Space。

version: "3" services: imagor: image: shumc/imagor:latest environment: PORT: 8000 IMAGOR_SECRET: mysecret # URL签名的密钥 AWS_ACCESS_KEY_ID: ... AWS_SECRET_ACCESS_KEY: ... AWS_REGION: ... S3_LOADER_BUCKET: mybucket # 通过指定存储桶启用S3加载器 S3_LOADER_BASE_DIR: images # 可选 S3_STORAGE_BUCKET: mybucket # 通过指定存储桶启用S3存储 S3_STORAGE_BASE_DIR: images # 可选 S3_STORAGE_ACL: public-read # 可选 - 参见 https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl S3_RESULT_STORAGE_BUCKET: mybucket # 通过指定存储桶启用S3结果存储 S3_RESULT_STORAGE_BASE_DIR: images/result # 可选 S3_RESULT_STORAGE_ACL: public-read # 可选 ports: - "8000:8000"
自定义S3端点

为S3兼容服务(如MinIO、DigitalOcean Space)配置自定义S3端点:

S3_ENDPOINT: http://minio:9000 S3_FORCE_PATH_STYLE: 1

默认情况下,S3会将存储桶名称作为子域名添加到请求URL中:

http://mybucket.minio:9000/image.jpg

对于自托管端点来说,这可能并不理想。您也可以使用S3_FORCE_PATH_STYLE=1切换到路径风格请求,这样主机名保持不变:

http://minio:9000/mybucket/image.jpg
S3加载器、存储和结果存储的不同AWS凭证

设置以下环境变量可以覆盖S3加载器、存储和结果存储的全局AWS凭证:

AWS_LOADER_REGION AWS_LOADER_ACCESS_KEY_ID AWS_LOADER_SECRET_ACCESS_KEY S3_LOADER_ENDPOINT AWS_STORAGE_REGION AWS_STORAGE_ACCESS_KEY_ID AWS_STORAGE_SECRET_ACCESS_KEY S3_STORAGE_ENDPOINT AWS_RESULT_STORAGE_REGION AWS_RESULT_STORAGE_ACCESS_KEY_ID AWS_RESULT_STORAGE_SECRET_ACCESS_KEY S3_RESULT_STORAGE_ENDPOINT

Google Cloud Storage

使用Google Cloud Storage的Docker Compose示例:

version: "3" services: imagor: image: shumc/imagor:latest volumes: - ./googlesecret:/etc/secrets/google environment: PORT: 8000 IMAGOR_SECRET: mysecret # URL签名的密钥 GOOGLE_APPLICATION_CREDENTIALS: /etc/secrets/google/appcredentials.json # Google Cloud密钥文件 GCLOUD_LOADER_BUCKET: mybucket # 通过指定存储桶启用加载器 GCLOUD_LOADER_BASE_DIR: images # 可选 GCLOUD_STORAGE_BUCKET: mybucket # 通过指定存储桶启用存储 GCLOUD_STORAGE_BASE_DIR: images # 可选 GCLOUD_STORAGE_ACL: publicRead # 可选 - 参见 https://cloud.google.com/storage/docs/json_api/v1/objects/insert GCLOUD_RESULT_STORAGE_BUCKET: mybucket # 通过指定存储桶启用结果存储 GCLOUD_RESULT_STORAGE_BASE_DIR: images/result # 可选 GCLOUD_RESULT_STORAGE_ACL: publicRead # 可选 ports: - "8000:8000"

存储和结果存储路径风格

存储结果存储路径风格可以在加载和保存图像时为存储路径启用额外的哈希规则:

IMAGOR_STORAGE_PATH_STYLE=digest

  • foobar.jpg 变为 e6/86/1a810ff186b4f747ef85f7c53946f0e6d8cb

IMAGOR_RESULT_STORAGE_PATH_STYLE=digest

  • fit-in/16x17/foobar.jpg 变为 61/4c/9ba1725e8cdd8263a4ad437c56b35f33deba

IMAGOR_RESULT_STORAGE_PATH_STYLE=suffix

  • 166x169/top/foobar.jpg 变为 foobar.45d8ebb31bd4ed80c26e.jpg
  • 17x19/smart/example.com/foobar 变为 example.com/foobar.ddd349e092cda6d9c729

IMAGOR_RESULT_STORAGE_PATH_STYLE=size

  • 166x169/top/foobar.jpg 变为 foobar.45d8ebb31bd4ed80c26e_166x169.jpg
  • 17x19/smart/example.com/foobar 变为 example.com/foobar.ddd349e092cda6d9c729_17x19

安全性

URL签名

在生产环境中,强烈建议关闭IMAGOR_UNSAFE并使用IMAGOR_SECRET设置URL签名,以防止滥用多个图像操作的DDoS攻击。

URL签名哈希基于SHA摘要,通过使用密钥对URL路径(不包括/unsafe/)进行处理创建。然后将哈希进行Base64 URL编码。 Node.js示例:

const crypto = require('crypto'); function sign(path, secret) { const hash = crypto.createHmac('sha1', secret) .update(path) .digest('base64') .replace(/\+/g, '-').replace(/\//g, '_') return hash + '/' + path } console.log(sign('500x500/top/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png', 'mysecret')) // cST4Ko5_FqwT3BDn-Wf4gO3RFSk=/500x500/top/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png

自定义HMAC签名器

imagor默认使用SHA1 HMAC签名器,与thumbor使用的相同。然而,SHA1不被认为是加密安全的。如果这是一个问题,可以配置不同的签名方法和截断长度。imagor支持sha1sha256sha512签名器类型:

IMAGOR_SIGNER_TYPE=sha256 IMAGOR_SIGNER_TRUNCATE=40

Node.js示例则变为:

const crypto = require('crypto'); function sign(path, secret) { const hash = crypto.createHmac('sha256', secret) .update(path) .digest('base64') .slice(0, 40) .replace(/\+/g, '-').replace(/\//g, '_') return hash + '/' + path } console.log(sign('500x500/top/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png', 'mysecret')) // IGEn3TxngivD0jy4uuiZim2bdUCvhcnVi1Nm0xGy/500x500/top/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png

防止图像炸弹

imagor在实际处理之前会检查图像类型及其分辨率。如果图像尺寸过大,处理将被拒绝,这可以防止所谓的"图像炸弹"。您可以使用VIPS_MAX_RESOLUTIONVIPS_MAX_WIDTHVIPS_MAX_HEIGHT设置允许的最大图像分辨率和尺寸:

VIPS_MAX_RESOLUTION=16800000 VIPS_MAX_WIDTH=5000 VIPS_MAX_HEIGHT=5000

允许的源和基础URL

使用HTTP_LOADER_ALLOWED_SOURCESHTTP_LOADER_ALLOWED_SOURCE_REGEXP将特定主机列入白名单,以限制仅从允许的源加载图像。

  • HTTP_LOADER_ALLOWED_SOURCES接受带有glob模式的csv,例如:

    HTTP_LOADER_ALLOWED_SOURCES=*.foobar.com,my.foobar.com,mybucket.s3.amazonaws.com
  • HTTP_LOADER_ALLOWED_SOURCE_REGEXP接受匹配完整URL的正则表达式,例如:

    HTTP_LOADER_ALLOWED_SOURCE_REGEXP='^https://raw\.githubusercontent\.com/cshum/imagor/.*'

或者,可以为严格从一个HTTP源加载图像设置基础URL。这也会从图像端点中删除基础URL:

示例URL:

http://localhost:8000/unsafe/fit-in/200x150/filters:fill(yellow):watermark(raw.githubusercontent.com/cshum/imagor/master/testdata/gopher-front.png,repeat,bottom,0,40,40)/raw.githubusercontent.com/cshum/imagor/master/testdata/dancing-banana.gif

使用HTTP加载器基础URL配置:

HTTP_LOADER_BASE_URL=https://raw.githubusercontent.com/cshum/imagor/master

示例URL则变为:

http://localhost:8000/unsafe/fit-in/200x150/filters:fill(yellow):watermark(testdata/gopher-front.png,repeat,bottom,0,40,40)/testdata/dancing-banana.gif

元数据和Exif

imagor提供元数据端点,用于提取图像格式、分辨率和Exif元数据等信息。 在底层,它尝试仅检索足够提取头部的数据,而不会在内存中读取和处理整个图像。

要使用元数据端点,请在URL签名哈希后、图像操作之前添加/meta。示例:

http://localhost:8000/unsafe/meta/fit-in/50x50/raw.githubusercontent.com/cshum/imagor/master/testdata/Canon_40D.jpg
{ "format": "jpeg", "content_type": "image/jpeg", "width": 50, "height": 34, "orientation": 1, "pages": 1, "bands": 3, "exif": { "ApertureValue": "368640/65536", "ColorSpace": 1, "ComponentsConfiguration": "Y Cb Cr -", "Compression": 6, "DateTime": "2008:07:31 10:38:11", "ISOSpeedRatings": 100, "Make": "Canon", "MeteringMode": 5, "Model": "Canon EOS 40D", //... } }

在现有端点前添加/params会以JSON形式返回端点属性,这对预览端点参数很有用。示例:

curl 'http://localhost:8000/params/g5bMqZvxaQK65qFPaP1qlJOTuLM=/fit-in/500x400/0x20/filters:fill(white)/raw.githubusercontent.com/cshum/imagor/master/testdata/gopher.png'

Go库

imagor是一个以速度、安全性和可扩展性为目标构建的Go库。 它通过一系列Go包组成的模块化架构,实现了高级图像处理:

  • imagor - imagor核心库
  • imagorpath - 解析和生成imagor端点
  • vips - libvips C绑定,实现了imagor.Processor接口
  • httploader - HTTP加载器,实现了imagor.Loader接口
  • filestorage - 文件存储,实现了imagor.Storage接口
  • s3storage - AWS S3存储,实现了imagor.Storage接口
  • gcloudstorage - Google Cloud存储,实现了imagor.Storage接口

安装libvips并启用CGO:

  • Mac系统使用brew install vips
  • 设置CGO_CFLAGS_ALLOW=-Xpreprocessor以编译Go

请参考以下示例和examples文件夹,了解使用imagor的各种方法:

package main import ( "context" "github.com/cshum/imagor" "github.com/cshum/imagor/imagorpath" "github.com/cshum/imagor/loader/httploader" "github.com/cshum/imagor/vips" "io" "os" ) func main() { app := imagor.New( imagor.WithLoaders(httploader.New()), imagor.WithProcessors(vips.NewProcessor()), ) ctx := context.Background() if err := app.Startup(ctx); err != nil { panic(err) } defer app.Shutdown(ctx) blob, err := app.Serve(ctx, imagorpath.Params{ Image: "https://yellow-cdn.veclightyear.com/ab5030c0/d00cfff8-87e8-4cfd-b18b-b3d15adb24cf.png", Width: 500, Height: 500, Smart: true, Filters: []imagorpath.Filter{ {"fill", "white"}, {"format", "jpg"}, }, }) if err != nil { panic(err) } reader, _, err := blob.NewReader() if err != nil { panic(err) } defer reader.Close() file, err := os.Create("gopher.jpg") if err != nil { panic(err) } defer file.Close() if _, err := io.Copy(file, reader); err != nil { panic(err) } }

配置

imagor支持命令行参数和环境变量,环境变量采用大写蛇形命名法,等同于相应的参数。使用imagor -h可查看所有可用选项。 例如,-imagor-secret对应的环境变量为IMAGOR_SECRET

# 以下两种方式等效 imagor -debug -imagor-secret 1234 DEBUG=1 IMAGOR_SECRET=1234 imagor

配置也可以在.env环境变量文件中指定,并通过-config标志引用:

imagor -config path/to/config.env

config.env:

PORT=8000 IMAGOR_SECRET=mysecret DEBUG=1

可用选项

imagor -h
使用方法:
  -debug
        调试模式
  -port int
        服务器端口 (默认 8000)
  -version
        显示imagor版本
  -config string
        从指定文件中获取配置 (默认 ".env")

  -imagor-secret string
        用于签名imagor URL的密钥
  -imagor-unsafe
        不安全的imagor模式,不需要URL签名。容易受到URL篡改
  -imagor-auto-webp
        如果浏览器支持,自动输出WebP格式
  -imagor-auto-avif
        如果浏览器支持,自动输出AVIF格式(实验性)
  -imagor-base-params string
        应用于所有结果图像的imagor端点基本参数,例如 filters:watermark(example.jpg)
  -imagor-signer-type string
        imagor URL签名哈希类型: sha1, sha256, sha512 (默认 "sha1")
  -imagor-signer-truncate int
        imagor URL签名截断长度
  -imagor-result-storage-path-style string
        imagor结果存储路径样式: original, digest, suffix (默认 "original")
  -imagor-storage-path-style string
        imagor存储路径样式: original, digest (默认 "original")
  -imagor-cache-header-ttl duration
        成功图像响应的imagor HTTP缓存头部TTL (默认 168h0m0s)
  -imagor-cache-header-swr duration
        成功图像响应的imagor HTTP Cache-Control头部stale-while-revalidate (默认 24h0m0s)
  -imagor-cache-header-no-cache
        成功图像响应的imagor HTTP Cache-Control头部no-cache
  -imagor-request-timeout duration
        执行imagor请求的超时时间 (默认 30s)
  -imagor-load-timeout duration
        imagor加载器请求的超时时间,应小于imagor-request-timeout
  -imagor-save-timeout duration
        将图像保存到imagor存储的超时时间
  -imagor-process-timeout duration
        图像处理的超时时间
  -imagor-process-concurrency int
        同时执行的图像处理最大数量。超过此限制的请求将被放入队列。设置-1表示无限制 (默认 -1)
  -imagor-process-queue-size int
        可以放入队列的图像处理最大数量。超过此限制的请求将被以HTTP状态429拒绝
  -imagor-base-path-redirect string
        imagor /基本路径的重定向URL,例如 https://www.google.com
  -imagor-modified-time-check
        检查结果图像的修改时间与源图像对比。这可以消除过时的结果,但需要更多的查询
  -imagor-disable-params-endpoint
        禁用imagor /params端点
  -imagor-disable-error-body
        禁用错误时的响应主体

  -server-address string
        服务器地址
  -server-cors
        启用CORS
  -server-strip-query-string
        启用去除查询字符串的重定向
  -server-path-prefix string
        服务器路径前缀
  -server-access-log
        启用服务器访问日志

  -prometheus-bind string
        指定地址和端口以启用Prometheus指标,例如 :5000, prom:7000
  -prometheus-path string
        Prometheus指标路径 (默认 "/")
        
  -http-loader-allowed-sources string
        如果设置,HTTP加载器允许从这些主机加载图像的白名单。接受带有glob模式的csv,例如 *.google.com,*.github.com
  -http-loader-base-url string
        HTTP加载器基础URL,预置到现有图像路径前。这会覆盖默认的scheme选项
  -http-loader-forward-headers string
        通过csv转发请求头到HTTP加载器请求,例如 User-Agent,Accept
  -http-loader-override-response-headers string
        通过csv覆盖HTTP加载器响应头到图像响应,例如 Cache-Control,Expires
  -http-loader-forward-client-headers
        将浏览器客户端请求头转发到HTTP加载器请求
  -http-loader-insecure-skip-verify-transport
        HTTP加载器使用InsecureSkipVerify为true的HTTP传输
  -http-loader-max-allowed-size int
        如果设置,HTTP加载器加载图像的最大允许大小(字节)
  -http-loader-proxy-urls string
        HTTP加载器代理URL。仅当存在此值时启用HTTP加载器代理。接受代理url的csv,例如 http://user:pass@host:port,http://user:pass@host:port
  -http-loader-allowed-source-regexp string
        如果设置,HTTP加载器允许从这些主机加载图像的正则表达式。与允许的主机glob模式源组合为OR关系
  -http-loader-proxy-allowed-sources string
        如果设置了代理URL,HTTP加载器代理允许的主机启用代理传输。接受带有glob模式的csv,例如 *.google.com,*.github.com
  -http-loader-default-scheme string
        如果图像路径未指定,HTTP加载器的默认scheme。设置"nil"以禁用默认scheme (默认 "https")
  -http-loader-accept string
        HTTP加载器设置请求Accept头部并验证响应Content-Type头部 (默认 "*/*")
  -http-loader-block-link-local-networks
        HTTP加载器拒绝连接到链接本地网络IP地址
  -http-loader-block-loopback-networks
        HTTP加载器拒绝连接到回环网络IP地址
  -http-loader-block-private-networks
        HTTP加载器拒绝连接到私有网络IP地址
  -http-loader-block-networks string
        HTTP加载器拒绝连接到指定网络IP地址。此选项接受以CIDR表示法的网络列表,用逗号分隔,例如 ::1/128,127.0.0.0/8
  -http-loader-disable
        禁用HTTP加载器

-file-safe-chars string 要从图像键转义中排除的文件安全字符。设置为 -- 表示无操作 -file-loader-base-dir string 文件加载器的基础目录。仅当存在此值时才启用文件加载器 -file-loader-path-prefix string 文件加载器的基础路径前缀 -file-result-storage-base-dir string 文件结果存储的基础目录。仅当存在此值时才启用文件结果存储 -file-result-storage-mkdir-permission string 文件结果存储创建目录的权限(默认为"0755") -file-result-storage-path-prefix string 文件结果存储的基础路径前缀 -file-result-storage-write-permission string 文件存储写入权限(默认为"0666") -file-result-storage-expiration duration 文件结果存储的过期时间,例如24h。默认不过期 -file-storage-base-dir string 文件存储的基础目录。仅当存在此值时才启用文件存储 -file-storage-path-prefix string 文件存储的基础路径前缀 -file-storage-mkdir-permission string 文件存储创建目录的权限(默认为"0755") -file-storage-write-permission string 文件存储写入权限(默认为"0666") -file-storage-expiration duration 文件存储的过期时间,例如24h。默认不过期

-aws-access-key-id string AWS访问密钥ID。如果使用S3加载器或S3存储则必需 -aws-region string AWS区域。如果使用S3加载器或S3存储则必需 -aws-secret-access-key string AWS秘密访问密钥。如果使用S3加载器或S3存储则必需 -aws-session-token string AWS会话令牌。可选的临时凭证令牌 -s3-endpoint string 可选的S3端点,用于覆盖默认值 -s3-safe-chars string 要从S3图像键转义中排除的安全字符。设置为 -- 表示无操作 -s3-force-path-style 强制S3请求使用路径样式寻址s3.amazonaws.com/bucket/key,而不是bucket.s3.amazonaws.com/key -s3-loader-bucket string S3加载器的S3存储桶。仅当存在此值时才启用S3加载器 -s3-loader-base-dir string S3加载器的基础目录 -s3-loader-path-prefix string S3加载器的基础路径前缀 -s3-result-storage-bucket string S3结果存储的S3存储桶。仅当存在此值时才启用S3结果存储 -s3-result-storage-base-dir string S3结果存储的基础目录 -s3-result-storage-path-prefix string S3结果存储的基础路径前缀 -s3-result-storage-acl string S3结果存储的上传ACL(默认为"public-read") -s3-result-storage-expiration duration S3结果存储的过期时间,例如24h。默认不过期 -s3-storage-bucket string S3存储的S3存储桶。仅当存在此值时才启用S3存储 -s3-storage-base-dir string S3存储的基础目录 -s3-storage-path-prefix string S3存储的基础路径前缀 -s3-storage-acl string S3存储的上传ACL(默认为"public-read") -s3-storage-expiration duration S3存储的过期时间,例如24h。默认不过期

-aws-loader-access-key-id string S3加载器的AWS访问密钥ID,用于覆盖全局配置 -aws-loader-region string S3加载器的AWS区域,用于覆盖全局配置 -aws-loader-secret-access-key string S3加载器的AWS秘密访问密钥,用于覆盖全局配置 -aws-loader-session-token string S3加载器的AWS会话令牌,用于覆盖全局配置 -s3-loader-endpoint string 可选的S3加载器端点,用于覆盖默认值 -aws-storage-access-key-id string S3存储的AWS访问密钥ID,用于覆盖全局配置 -aws-storage-region string S3存储的AWS区域,用于覆盖全局配置 -aws-storage-secret-access-key string S3存储的AWS秘密访问密钥,用于覆盖全局配置 -aws-storage-session-token string S3存储的AWS会话令牌,用于覆盖全局配置 -s3-storage-endpoint string 可选的S3存储端点,用于覆盖默认值 -aws-result-storage-access-key-id string S3结果存储的AWS访问密钥ID,用于覆盖全局配置 -aws-result-storage-region string S3结果存储的AWS区域,用于覆盖全局配置 -aws-result-storage-secret-access-key string S3结果存储的AWS秘密访问密钥,用于覆盖全局配置 -aws-result-storage-session-token string S3结果存储的AWS会话令牌,用于覆盖全局配置 -s3-result-storage-endpoint string 可选的S3存储端点,用于覆盖默认值

-gcloud-safe-chars string 要从谷歌云图像键转义中排除的安全字符。设置为 -- 表示无操作 -gcloud-loader-base-dir string 谷歌云加载器的基础目录 -gcloud-loader-bucket string 谷歌云存储加载器的存储桶名称。仅当存在此值时才启用谷歌云加载器 -gcloud-loader-path-prefix string 谷歌云加载器的基础路径前缀 -gcloud-result-storage-acl string 谷歌云结果存储的上传ACL -gcloud-result-storage-base-dir string 谷歌云结果存储的基础目录 -gcloud-result-storage-bucket string 谷歌云结果存储的存储桶名称。仅当存在此值时才启用谷歌云结果存储 -gcloud-result-storage-expiration duration 谷歌云结果存储的过期时间,例如24h。默认不过期 -gcloud-result-storage-path-prefix string 谷歌云结果存储的基础路径前缀 -gcloud-storage-acl string 谷歌云存储的上传ACL -gcloud-storage-base-dir string 谷歌云的基础目录 -gcloud-storage-bucket string 谷歌云存储的存储桶名称。仅当存在此值时才启用谷歌云存储 -gcloud-storage-expiration duration 谷歌云存储的过期时间,例如24h。默认不过期 -gcloud-storage-path-prefix string 谷歌云存储的基础路径前缀

-vips-max-animation-frames int VIPS要加载的最大动画帧数。设置为1禁用动画,-1表示无限制 -vips-disable-blur VIPS禁用vips处理器的模糊操作 -vips-disable-filters string VIPS通过CSV禁用滤镜,例如blur,watermark,rgb -vips-max-filter-ops int VIPS允许的最大滤镜操作数。设置为-1表示无限制(默认为-1) -vips-max-width int VIPS最大图像宽度 -vips-max-height int VIPS最大图像高度 -vips-max-resolution int VIPS最大图像分辨率 -vips-mozjpeg VIPS启用MozJPEG的最大压缩。需要安装mozjpeg -vips-avif-speed int VIPS avif速度,最低为0,最快为9(默认为5)。

编辑推荐精选

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多