You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用wasm-vips对图像重采样上采样,支持buffer输入与指定插值器?

wasm-vips 上采样实现方案

完整实现代码

const vips = await Vips();

// 替换为你传入的Uint8Array格式图像数据
const inputBuffer = /* 你的图像Uint8Array数据 */;
// 从内存buffer加载图像
let im = vips.Image.newFromBuffer(inputBuffer);

const targetWidth = 2017;
const targetHeight = 2017;
// 计算横纵方向缩放比例
const scaleX = targetWidth / im.width;
const scaleY = targetHeight / im.height;

// 指定插值器,可替换为 nohalo、lanczos2、bilinear 等
const interpolator = vips.Interpolator.new('lanczos3');

// 方式1:使用resize接口(更简洁,推荐)
let resizedIm = im.resize(scaleX, {
  vscale: scaleY,
  interpolator: interpolator
});

// 方式2:使用affine接口(和你查询的官方接口对应)
// const transformMatrix = [scaleX, 0, 0, scaleY];
// let resizedIm = im.affine(transformMatrix, {
//   interpolator: interpolator
// });

// 若需要输出为Uint8Array可调用writeToBuffer,后缀名可替换为.png等对应格式
const outputBuffer = resizedIm.writeToBuffer('.jpg');

// 操作完成后释放图像内存,避免泄漏
im.delete();
resizedIm.delete();

关键说明

  • 内存数据加载:使用vips.Image.newFromBuffer()直接接收Uint8Array类型的图像数据作为输入,无需读取本地文件,libvips会自动识别输入的图像格式。
  • 插值器指定:通过vips.Interpolator.new()传入插值器名称即可切换采样算法,支持的取值包括lanczos3、nohalo、lanczos2、bilinear、nearest等。
  • 宽高比适配:如果不需要拉伸图像保持原比例,可以先计算等比缩放的最大尺寸,缩放后再通过embed方法补边到2017x2017即可。

内容的提问来源于stack exchange,提问作者dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:36:03