Files
SnapOtter/apps/docs/zh-CN/api/image-engine.md
T

212 lines
8.0 KiB
Markdown
Raw Normal View History

---
description: "图像引擎操作参考。所有基于 Sharp 的图像处理操作及其参数。"
i18n_source_hash: 42febdf85fa8
i18n_provenance: human
i18n_output_hash: 76ddc27cca10
---
# 图像引擎 {#image-engine}
`@snapotter/image-engine` 包处理所有非 AI 图像操作。它封装了 [Sharp](https://sharp.pixelplumbing.com/),完全在进程内运行,没有外部依赖。
## 操作 {#operations}
### resize {#resize}
将图像缩放到特定尺寸或按百分比缩放。
| 参数 | 类型 | 描述 |
|---|---|---|
| `width` | number | 目标宽度(像素) |
| `height` | number | 目标高度(像素) |
| `fit` | string | `cover``contain``fill``inside``outside` |
| `withoutEnlargement` | boolean | 若为 true,不会放大较小的图像 |
| `percentage` | number | 按百分比缩放,而非绝对尺寸 |
你可以设置 `width``height` 或两者。如果只设置其中一个,另一个会被计算以保持宽高比。
### crop {#crop}
从图像中裁出一个矩形区域。
| 参数 | 类型 | 描述 |
|---|---|---|
| `left` | number | 距左边缘的 X 偏移 |
| `top` | number | 距顶边缘的 Y 偏移 |
| `width` | number | 裁剪区域宽度 |
| `height` | number | 裁剪区域高度 |
| `unit` | string | `px`(默认)或 `percent` |
### rotate {#rotate}
将图像旋转给定角度。
| 参数 | 类型 | 描述 |
|---|---|---|
| `angle` | number | 旋转角度(度,0-360 |
| `background` | string | 暴露区域的填充颜色(默认:`#000000`)。仅适用于非 90 度角。 |
### flip {#flip}
水平、垂直或双向镜像图像。至少一项必须为 true。
| 参数 | 类型 | 描述 |
|---|---|---|
| `horizontal` | boolean | 左右镜像 |
| `vertical` | boolean | 上下镜像 |
### convert {#convert}
更改图像格式。
| 参数 | 类型 | 描述 |
|---|---|---|
| `format` | string | 目标格式:`jpg``png``webp``avif``tiff``gif``jxl``heic``heif``bmp``ico``jp2``qoi` |
| `quality` | number | 压缩质量(1-100,适用于有损格式) |
前七种格式(`jpg``jxl`)由 Sharp 在进程内编码。其余格式在 API 层使用外部编码器:`heic`/`heif` 通过 heif-enc`bmp`/`ico` 通过 ImageMagick`jp2` 通过 opj_compress`qoi` 通过内联 TypeScript 编解码器。
### compress {#compress}
在保持相同格式的前提下减小文件大小。
| 参数 | 类型 | 描述 |
|---|---|---|
| `quality` | number | 目标质量(1-100 |
| `targetSizeBytes` | number | 可选的目标文件大小(字节) |
| `format` | string | 可选的格式覆盖 |
### strip-metadata {#strip-metadata}
从图像中移除 EXIF、IPTC、XMP 和 ICC 元数据。不带参数(或 `stripAll: true`)时移除所有内容。传入单独的标志以进行选择性移除。
| 参数 | 类型 | 描述 |
|---|---|---|
| `stripAll` | boolean | 移除所有元数据(未设置任何标志时的默认行为) |
| `stripExif` | boolean | 移除 EXIF 数据(若未单独设置 `stripGps`,则包含 GPS |
| `stripGps` | boolean | 移除 GPS 位置数据 |
| `stripIcc` | boolean | 移除 ICC 色彩配置文件 |
| `stripXmp` | boolean | 移除 XMP 元数据 |
### 色彩调整 {#color-adjustments}
这些操作修改图像的色彩属性。每个操作接受一个数值。
| 操作 | 参数 | 范围 | 描述 |
|---|---|---|---|
| `brightness` | `value` | -100 到 100 | 调整亮度 |
| `contrast` | `value` | -100 到 100 | 调整对比度 |
| `saturation` | `value` | -100 到 100 | 调整色彩饱和度 |
### 色彩滤镜 {#color-filters}
这些应用固定的色彩变换。它们不接受参数。
| 操作 | 描述 |
|---|---|
| `grayscale` | 转换为灰度 |
| `sepia` | 应用棕褐色调 |
| `invert` | 反转所有颜色 |
### 色彩通道 {#color-channels}
调整单独的 RGB 色彩通道。数值为倍率,100 = 无变化。
| 参数 | 类型 | 描述 |
|---|---|---|
| `red` | number | 红色通道倍率(0 到 200100 = 不变) |
| `green` | number | 绿色通道倍率(0 到 200100 = 不变) |
| `blue` | number | 蓝色通道倍率(0 到 200100 = 不变) |
### sharpen {#sharpen}
由单个数值控制的简单锐化。
| 参数 | 类型 | 描述 |
|---|---|---|
| `value` | number | 锐化强度(0 到 100)。映射到 0.5-10 的高斯 sigma。 |
### sharpen-advanced {#sharpen-advanced}
高级锐化,具有三种可选方法和一个可选的降噪预处理。
| 参数 | 类型 | 描述 |
|---|---|---|
| `method` | string | `adaptive``unsharp-mask``high-pass` |
| `sigma` | number | 高斯模糊半径,0.5-10(自适应) |
| `m1` | number | 平坦区域锐化,0-10(自适应) |
| `m2` | number | 纹理区域锐化,0-20(自适应) |
| `x1` | number | 平坦/锯齿阈值,0-10(自适应) |
| `y2` | number | 最大提亮(光晕钳制),0-50(自适应) |
| `y3` | number | 最大压暗(光晕钳制),0-50(自适应) |
| `amount` | number | 强度百分比,0-500USM 锐化) |
| `radius` | number | 模糊半径,0.1-5.0USM 锐化) |
| `threshold` | number | 最小边缘亮度,0-255USM 锐化) |
| `strength` | number | 混合强度,0-100(高通) |
| `kernelSize` | number | `3``5`,对应 3x3 / 5x5 卷积核(高通) |
| `denoise` | string | 降噪预处理:`off``light``medium``strong` |
参数因方法而异。只提供与所选方法相关的参数。
### color-blindness {#color-blindness}
使用 3x3 色彩重组矩阵模拟色觉缺陷。
| 参数 | 类型 | 描述 |
|---|---|---|
| `type` | string | 取值之一:`protanopia``deuteranopia``tritanopia``protanomaly``deuteranomaly``tritanomaly``achromatopsia``blueConeMonochromacy` |
### edit-metadata {#edit-metadata}
写入或移除单个 EXIF/IPTC 元数据字段,而无需移除整个数据块。
| 参数 | 类型 | 描述 |
|---|---|---|
| `artist` | string | EXIF Artist 标签 |
| `copyright` | string | EXIF Copyright 标签 |
| `imageDescription` | string | EXIF ImageDescription 标签 |
| `software` | string | EXIF Software 标签 |
| `dateTime` | string | EXIF DateTime 标签 |
| `dateTimeOriginal` | string | EXIF DateTimeOriginal 标签 |
| `clearGps` | boolean | 移除所有 GPS 标签 |
| `fieldsToRemove` | string[] | 要删除的 EXIF 字段名列表 |
所有参数均为可选。`fieldsToRemove` 中列出的字段会从现有 EXIF 块中删除。通过命名参数设置的字段会被写入(或覆盖)。像 MakerNote 这类二进制/不安全的键会被静默忽略。
## 格式检测 {#format-detection}
引擎会根据文件头自动检测输入格式,而不仅仅依赖文件扩展名。这意味着一个实际上是 PNG 的 `.jpg` 文件也能被正确处理。检测采用多层方法:先看魔数字节,再以文件扩展名作为回退。
SnapOtter 支持 **55+ 种输入格式**和 **13 种输出格式**,包括来自 20 多个品牌的 23 种相机 RAW 格式、专业格式(PSD、EPS、OpenEXR、HDR)、现代编解码格式(JPEG XL、AVIF、HEIC、QOI、JPEG 2000)以及科学/游戏格式(FITS、DDS)。解码在可能的情况下由 Sharp 原生处理,并自动回退到 ImageMagick、LibRaw 和专用 CLI 解码器。
完整列表请参见[支持的格式](/zh-CN/guide/supported-formats)页面。
## 元数据提取 {#metadata-extraction}
`info` 工具返回图像元数据。完整字段参考请参见[图像信息](/zh-CN/tools/image/info)。
```json
{
"filename": "photo.jpg",
"fileSize": 2450000,
"width": 4032,
"height": 3024,
"format": "jpeg",
"channels": 3,
"hasAlpha": false,
"colorSpace": "srgb",
"density": 72,
"isProgressive": false,
"hasExif": true,
"hasIcc": true,
"hasXmp": false,
"bitDepth": "8",
"pages": 1,
"histogram": [
{ "channel": "red", "min": 0, "max": 255, "mean": 128.45, "stdev": 52.31 },
{ "channel": "green", "min": 2, "max": 253, "mean": 115.22, "stdev": 48.76 },
{ "channel": "blue", "min": 0, "max": 250, "mean": 102.89, "stdev": 55.14 }
]
}
```