图片处理

PicFast 提供两套图片处理机制,根据场景选择:

  • URL 动态处理 —— 在任意图片 URL 后面追加 @ 加参数即可,结果由 CDN / 浏览器缓存。适合一次性缩放,或同一张源图在多个尺寸场景里复用。
  • 上传时处理 —— 服务端在上传流程里处理并存储结果。适合统一的压缩、剥离元数据、批量水印等"先处理再落盘"的策略。

URL 动态处理(@ 参数)

在图片 URL 后面追加 @ 加逗号分隔的参数;首次处理后会缓存,重复请求直接走缓存。

常用示例

# 原图
https://picfast.example.com/i/abc123.jpg

# 缩放为宽 300px
https://picfast.example.com/i/abc123.jpg@w_300

# 缩放为高 200px
https://picfast.example.com/i/abc123.jpg@h_200

# 适配 300×200 框(保持比例)
https://picfast.example.com/i/abc123.jpg@w_300,h_200

# 压缩到质量 80
https://picfast.example.com/i/abc123.jpg@q_80

# 转换为 WebP
https://picfast.example.com/i/abc123.jpg@f_webp

# 组合使用
https://picfast.example.com/i/abc123.jpg@w_300,h_200,q_60,f_webp

参数

参数说明范围
w_目标宽度(px)1 – 10000
h_目标高度(px)1 – 10000
q_输出质量1 – 100
f_输出格式jpegpngwebpgif

行为

  • 同时指定 w_h_ 时,图片缩放至不超过该框的大小,保持比例(不裁剪)。
  • GIF 不做处理,原样返回。
  • 处理失败时原图原样返回。
  • 处理结果使用 Cache-Control: public, max-age=2592000(30 天),CDN / 浏览器缓存会直接返回处理结果。

上传时处理(服务端)

用户上传图片时,服务端按配置的处理流水线执行一遍,结果直接落盘。原图不再保留。

用户设置

每个用户可在上传页右上角齿轮弹窗里配置自己的处理策略。设置保存在服务器,对之后的所有上传生效。

设置项说明默认值
压缩质量JPEG / WebP 编码质量,1 – 100。仅在输出格式为 jpegwebp 时生效。85
转码格式origin 保持原格式;jpeg / png / webp 转码。origin
去除 EXIF存储前剥离全部 EXIF 元数据(相机、GPS 等)。建议开启以保护隐私。
文字水印在每张上传图片上叠加可配置文字。下方有详细参数。

水印参数

选项说明
文本渲染的文字内容。开启水印时必填。
位置top-lefttop-rightcenterbottom-leftbottom-right
字号8 – 200(CSS 像素)。
颜色任意 CSS 颜色值(如 #FFFFFFoklch(...))。
透明度0 – 1。

管理员控制

管理员可在「访问控制」里配置两个全局开关,覆盖用户设置:

开关作用
allow_user_image_processing关闭时,所有用户都强制使用系统默认处理(质量 85、保持原格式、去 EXIF、无水印)。齿轮弹窗仍可打开但字段禁用。
skip_image_processing开启时,所有上传都跳过处理流水线,文件原样存储。适合做原始备份或内部受信用户场景。

优先级:skip_image_processing > 用户设置;若 skip 关闭且用户未配置,则使用系统默认。

行为

  • 处理在服务端(libvips)一次性完成,存储侧只接收处理后的文件,节省带宽。
  • 原图不保留;如需未处理源文件请自行备份。
  • 每项设置都有服务端校验(质量 1-100、格式枚举、字号 8-200、透明度 0-1),非法值会在保存时返回 400。
  • 处理失败时上传仍成功,使用原图存储(优雅降级)。

存储后端支持

后端URL 动态上传时备注
本地内置内置开箱即用
WebDAV内置内置开箱即用
S3 / OSS / COS / Kodo需要 link_mode: "proxy"内置URL 动态需要 proxy 模式,详见 存储后端

如果云存储后端直接返回 CDN 地址,可以改用云厂商自带的图片处理参数(如阿里云 OSS ?x-oss-process=...、七牛 ?imageView2/...)替代 PicFast 的 URL 动态层。

图片详情与搜索

每张图片都携带元数据,管理后台和公开图片详情页均可查看。点击图片即可打开详情面板。

EXIF 元数据

PicFast 在上传时自动从每张 JPEG 中提取 EXIF 元数据(相机型号、镜头、曝光参数、GPS 位置等),并在图片详情面板中展示。无需额外配置,服务端上传时自动完成。

感知哈希 (pHash)

PicFast 会在上传时为支持的图片格式计算 64 位的感知哈希 (pHash)。与传统的密码学哈希(单像素改变即导致哈希值全变)不同,pHash 在图片经过缩放、轻微裁剪或压缩后依然保持相似,为重复图片检测与视觉相似度校验提供数据基础。

标签

图片可通过标签进行分类管理。标签在图片详情面板或「标签」管理页面中操作。支持的操作:

  • 在管理后台标签页创建和删除标签
  • 在详情面板中为任意图片添加或移除标签
  • 在图片列表中按标签筛选
  • 所有标签接口均验证标签所有权和图片可见性

高级搜索

图片列表除基础关键词搜索外,还支持以下筛选:

筛选条件说明
关键词对文件名做不区分大小写的模糊匹配
文件类型按扩展名筛选(png、jpg、webp、gif 等)
日期范围按上传时间起止范围筛选
标签筛选拥有指定标签的图片

OCR 文字识别

每张图片预留了 ocr_text 字段。配置 OCR 识别服务后,提取的文字将存入该字段并展示在图片详情面板中。内置 OCR 功能由 app.enable_dummy_ocr 控制(默认关闭),并发数上限为 5 — 生产环境建议接入真实 OCR 服务。