用于与 wasm-vips 交互的辅助包。
安装
安装该模块
npm install @wordpress/vips --save
要求
TypeScript 使用者需要 TypeScript 5 或更高版本。
API 参考
cancelOperations
取消指定项目 ID 的所有正在进行的图像操作。
onProgress 回调会检查该列表中是否存在该 ID,如果不存在,则终止该进程。
参数
- id
ItemId:项目 ID。
返回值
- boolean 是否取消了任何操作。
compressImage
使用 vips 压缩现有图像。
参数
- id
ItemId:项目 ID。 - buffer
ArrayBuffer:原始文件缓冲区。 - type
string:MIME 类型。 - options
ConvertImageOptions:压缩选项。
返回值
Promise< ArrayBuffer | ArrayBufferLike >:压缩后的文件数据。
convertImageFormat
使用 vips 将图像转换为另一种格式。
参数
- id
ItemId:项目 ID。 - buffer
ArrayBuffer:原始文件缓冲区。 - inputType
string:输入 MIME 类型。 - outputType
string:输出 MIME 类型。 - options
ConvertImageOptions:转换选项。
getUltraHdrInfo
探测 JPEG,以确定其是否为包含嵌入增益图的 UltraHDR 图像。
成功时返回尺寸和 HDR 余量;如果缓冲区不是有效的 UltraHDR JPEG(没有增益图、解码失败或格式不受支持),则返回 null。
参数
- buffer
ArrayBuffer:图像缓冲区。
返回值
Promise< UltraHdrInfo | null >:UltraHDR 信息;如果缓冲区不是 UltraHDR,则为 null。
hasTransparency
确定图像是否具有可见透明度。
仅凭通道存在是不够的:PNG 编码器通常即使在每个像素都完全不透明时也会保留 alpha 通道,而动态 GIF 会为了基于处置方法的帧合成而声明透明颜色索引,却不会渲染任何可见的透明像素。此检查会加载第一帧(该帧中的任何透明度都是可见的——没有前一帧可继承),并对 alpha 通道进行采样,以查找实际透明的像素。
参数
- buffer
ArrayBuffer:原始文件对象。
返回值
Promise< boolean >:图像中是否有任何像素部分或完全透明。
resizeImage
使用 vips 调整图像大小。
UltraHDR JPEG 会被自动检测并保留:libvips 的 uhdrload* 优先级高于 jpegload*,因此 newFromBuffer/thumbnailBuffer 会在解码基础图像的同时解码增益图,并且在附加增益图时,jpegsave* 会在输出时委托给 uhdrsave*。
动态图像的子尺寸仅从第一帧生成,与 WordPress 核心的服务器端行为一致:GD 和 Imagick 在调整大小时都会将动态图像扁平化,并且 wp_calculate_image_srcset() 会防止扁平化后的子尺寸与动态全尺寸图像混入 srcset。加载所有帧([n=-1])会为每个子尺寸重新编码完整动态 GIF,对于较长动画需要数十秒,并且可能产生大于原始文件的子尺寸。参见 https://github.com/WordPress/gutenberg/issues/80266。
参数
- id
ItemId:项目 ID。 - buffer
ArrayBuffer:原始文件缓冲区。 - type
string:MIME 类型。 - resize
ImageSizeCrop:调整大小选项。 - options
ResizeImageOptions:其他调整大小选项。
返回值
Promise< { buffer: ArrayBuffer | ArrayBufferLike; width: number; height: number; originalWidth: number; originalHeight: number; } >:处理后的文件数据以及原始尺寸和新尺寸。
rotateImage
根据 EXIF 方向值旋转图像。
EXIF 方向值:1 = 正常(无需旋转) 2 = 水平翻转 3 = 旋转 180° 4 = 垂直翻转 5 = 逆时针旋转 90° 并水平翻转 6 = 顺时针旋转 90° 7 = 顺时针旋转 90° 并水平翻转 8 = 逆时针旋转 90°
参数
- id
ItemId:项目 ID。 - buffer
ArrayBuffer:原始文件缓冲区。 - type
string:MIME 类型。 - orientation
number:EXIF 方向值(1-8)。
返回值
Promise< { buffer: ArrayBuffer | ArrayBufferLike; width: number; height: number; } >:旋转后的文件数据以及新尺寸。
vipsCancelOperations
取消指定项目 ID 的所有正在进行的图像操作。
onProgress 回调会检查该列表中是否存在该 ID,如果不存在,则终止该进程。
参数
- id
ItemId:项目 ID。
返回值
- boolean 是否取消了任何操作。
vipsCompressImage
使用 vips 压缩现有图像。
参数
- id
ItemId:项目 ID。 - buffer
ArrayBuffer:原始文件缓冲区。 - type
string:MIME 类型。 - options
ConvertImageOptions:压缩选项。
返回值
Promise< ArrayBuffer | ArrayBufferLike >:压缩后的文件数据。
vipsConvertImageFormat
使用 vips 将图像转换为另一种格式。
参数
- id
ItemId:项目 ID。 - buffer
ArrayBuffer:原始文件缓冲区。 - inputType
string:输入 MIME 类型。 - outputType
string:输出 MIME 类型。 - options
ConvertImageOptions:转换选项。
vipsGetUltraHdrInfo
探测 JPEG,以确定其是否为包含嵌入增益图的 UltraHDR 图像。
成功时返回尺寸和 HDR 余量;如果缓冲区不是有效的 UltraHDR JPEG(没有增益图、解码失败或格式不受支持),则返回 null。
参数
- buffer
ArrayBuffer:图像缓冲区。
返回值
Promise< UltraHdrInfo | null >:UltraHDR 信息;如果缓冲区不是 UltraHDR,则为 null。
vipsHasTransparency
确定图像是否具有可见透明度。
仅凭通道存在是不够的:PNG 编码器通常即使在每个像素都完全不透明时也会保留 alpha 通道,而动态 GIF 会为了基于处置方法的帧合成而声明透明颜色索引,却不会渲染任何可见的透明像素。此检查会加载第一帧(该帧中的任何透明度都是可见的——没有前一帧可继承),并对 alpha 通道进行采样,以查找实际透明的像素。
参数
- buffer
ArrayBuffer:原始文件对象。
返回值
Promise< boolean >:图像中是否有任何像素部分或完全透明。
vipsResizeImage
使用 vips 调整图像大小。
UltraHDR JPEG 会被自动检测并保留:libvips 的 uhdrload* 优先级高于 jpegload*,因此 newFromBuffer/thumbnailBuffer 会在解码基础图像的同时解码增益图,并且在附加增益图时,jpegsave* 会在输出时委托给 uhdrsave*。
动态图像的子尺寸仅从第一帧生成,与 WordPress 核心的服务器端行为一致:GD 和 Imagick 在调整大小时都会将动态图像扁平化,并且 wp_calculate_image_srcset() 会防止扁平化后的子尺寸与动态全尺寸图像混入 srcset。加载所有帧([n=-1])会为每个子尺寸重新编码完整动态 GIF,对于较长动画需要数十秒,并且可能产生大于原始文件的子尺寸。参见 https://github.com/WordPress/gutenberg/issues/80266。
参数
- id
ItemId:项目 ID。 - buffer
ArrayBuffer:原始文件缓冲区。 - type
string:MIME 类型。 - resize
ImageSizeCrop:调整大小选项。 - options
ResizeImageOptions:其他调整大小选项。
返回值
Promise< { buffer: ArrayBuffer | ArrayBufferLike; width: number; height: number; originalWidth: number; originalHeight: number; } >:处理后的文件数据以及原始尺寸和新尺寸。
vipsRotateImage
根据 EXIF 方向值旋转图像。
EXIF 方向值:1 = 正常(无需旋转) 2 = 水平翻转 3 = 旋转 180° 4 = 垂直翻转 5 = 逆时针旋转 90° 并水平翻转 6 = 顺时针旋转 90° 7 = 顺时针旋转 90° 并水平翻转 8 = 逆时针旋转 90°
参数
- id
ItemId:条目 ID。 - buffer
ArrayBuffer:原始文件缓冲区。 - type
string:MIME 类型。 - orientation
number:EXIF 方向值(1-8)。
返回值
Promise< { buffer: ArrayBuffer | ArrayBufferLike; width: number; height: number; } >:旋转后的文件数据及新的尺寸。