This page was machine-translated. Spotted a mistake?Help improve it.
Skip to content

影像引擎

@snapotter/image-engine 套件處理所有非 AI 的影像操作。它封裝了 Sharp,並完全在程序內執行,沒有外部相依性。

操作

resize

將影像縮放到指定尺寸或依百分比縮放。

參數型別說明
widthnumber目標寬度(像素)
heightnumber目標高度(像素)
fitstringcovercontainfillinsideoutside
withoutEnlargementboolean若為 true,不會放大較小的影像
percentagenumber依百分比縮放,而非絕對尺寸

你可以設定 widthheight 或兩者。若只設定其一,另一個會依維持長寬比自動計算。

crop

從影像中裁出一塊矩形區域。

參數型別說明
leftnumber從左邊緣起的 X 位移
topnumber從上邊緣起的 Y 位移
widthnumber裁切區域的寬度
heightnumber裁切區域的高度
unitstringpx(預設)或 percent

rotate

以指定角度旋轉影像。

參數型別說明
anglenumber旋轉角度(度,0-360)
backgroundstring露出區域的填色(預設:#000000)。僅適用於非 90 度的角度。

flip

將影像水平、垂直或兩者鏡射。至少必須有一項為 true。

參數型別說明
horizontalboolean左右鏡射
verticalboolean上下鏡射

convert

變更影像格式。

參數型別說明
formatstring目標格式:jpgpngwebpaviftiffgifjxlheicheifbmpicojp2qoi
qualitynumber壓縮品質(1-100,適用於失真格式)

前七種格式(jpgjxl)由 Sharp 在程序內編碼。其餘格式在 API 層使用外部編碼器:heic/heif 透過 heif-enc、bmp/ico 透過 ImageMagick、jp2 透過 opj_compress、qoi 透過內嵌的 TypeScript 編解碼器。

compress

在維持相同格式下縮小檔案大小。

參數型別說明
qualitynumber目標品質(1-100)
targetSizeBytesnumber選用的目標檔案大小(位元組)
formatstring選用的格式覆寫

strip-metadata

從影像移除 EXIF、IPTC、XMP 與 ICC 中繼資料。不帶參數(或 stripAll: true)時會移除全部。傳入個別旗標可進行選擇性移除。

參數型別說明
stripAllboolean移除所有中繼資料(未設定任何旗標時的預設)
stripExifboolean移除 EXIF 資料(若未另外設定 stripGps,則包含 GPS)
stripGpsboolean移除 GPS 位置資料
stripIccboolean移除 ICC 色彩描述檔
stripXmpboolean移除 XMP 中繼資料

色彩調整

這些操作會修改影像的色彩屬性。每個都接受單一數值。

操作參數範圍說明
brightnessvalue-100 到 100調整亮度
contrastvalue-100 到 100調整對比
saturationvalue-100 到 100調整色彩飽和度

色彩濾鏡

這些會套用固定的色彩轉換。它們不接受任何參數。

操作說明
grayscale轉換為灰階
sepia套用懷舊褐色調
invert反轉所有顏色

色彩通道

調整個別的 RGB 色彩通道。數值為乘數,其中 100 = 不變。

參數型別說明
rednumber紅色通道乘數(0 到 200,100 = 不變)
greennumber綠色通道乘數(0 到 200,100 = 不變)
bluenumber藍色通道乘數(0 到 200,100 = 不變)

sharpen

以單一數值控制的簡易銳利化。

參數型別說明
valuenumber銳利化強度(0 到 100)。對應到 0.5-10 的高斯 sigma。

sharpen-advanced

進階銳利化,有三種可選方法與選用的降噪前處理。

參數型別說明
methodstringadaptiveunsharp-maskhigh-pass
sigmanumber高斯模糊半徑,0.5-10(自適應)
m1number平坦區域銳利化,0-10(自適應)
m2number紋理區域銳利化,0-20(自適應)
x1number平坦/鋸齒門檻,0-10(自適應)
y2number最大提亮(光暈鉗制),0-50(自適應)
y3number最大壓暗(光暈鉗制),0-50(自適應)
amountnumber強度百分比,0-500(反遮罩銳利化)
radiusnumber模糊半徑,0.1-5.0(反遮罩銳利化)
thresholdnumber最小邊緣亮度,0-255(反遮罩銳利化)
strengthnumber混合強度,0-100(高通)
kernelSizenumber35 分別代表 3x3 / 5x5 卷積核(高通)
denoisestring降噪前處理:offlightmediumstrong

參數依方法而異。只需提供與所選方法相關的參數。

color-blindness

使用 3x3 色彩重組矩陣模擬色覺缺陷。

參數型別說明
typestring下列其中之一:protanopiadeuteranopiatritanopiaprotanomalydeuteranomalytritanomalyachromatopsiablueConeMonochromacy

edit-metadata

寫入或移除個別的 EXIF/IPTC 中繼資料欄位,而不移除整個區塊。

參數型別說明
artiststringEXIF Artist 標籤
copyrightstringEXIF Copyright 標籤
imageDescriptionstringEXIF ImageDescription 標籤
softwarestringEXIF Software 標籤
dateTimestringEXIF DateTime 標籤
dateTimeOriginalstringEXIF DateTimeOriginal 標籤
clearGpsboolean移除所有 GPS 標籤
fieldsToRemovestring[]要刪除的 EXIF 欄位名稱清單

所有參數皆為選用。列在 fieldsToRemove 中的欄位會從既有的 EXIF 區塊刪除。透過具名參數設定的欄位會被寫入(或覆寫)。像 MakerNote 這類二進位/不安全的鍵會被靜默忽略。

格式偵測

引擎會自動從檔案標頭偵測輸入格式,而不僅是從副檔名判斷。這表示一個實際上是 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 解碼器。

完整清單請見 支援的格式 頁面。

中繼資料擷取

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 }
  ]
}