Node.js 如何使用Node-Sharp包

Node.js 如何使用Node-Sharp包,node.js,node-modules,sharp,npm-package,Node.js,Node Modules,Sharp,Npm Package,实际上,我正在使用sharppackage调整图像大小。供参考:https://www.npmjs.com/package/sharp 我从前端(在react中)到后端(在节点中)获取图像数据,如下所示 imageData{ 名称:“xyz.JPEG”, 数据:, 尺码:23639, 编码:“7bit”, tempFilePath:“”, 错:, mimetype:'image/jpeg', md5:'899917d14fe775aa2097487e3ddcc9f6', mv:[功能:mv] }

实际上,我正在使用
sharp
package调整图像大小。供参考:
https://www.npmjs.com/package/sharp

我从前端(在react中)到后端(在节点中)获取图像数据,如下所示

imageData{
名称:“xyz.JPEG”,
数据:,
尺码:23639,
编码:“7bit”,
tempFilePath:“”,
错:,
mimetype:'image/jpeg',
md5:'899917d14fe775aa2097487e3ddcc9f6',
mv:[功能:mv]
}
但是,我不明白对于我要到达后端的格式,应该使用哪个函数。因为我不清楚在sharp包函数中缓冲区输出被传递到哪里。

请帮帮我。谢谢

您需要的是
图像数据中的
数据
,从前端开始,使用
sharp
模块中的
调整大小
功能

以下是如何将图像宽度调整为150像素的示例:

从“sharp”导入sharp;
/*
*此函数将返回一个承诺
*/
异步函数调整大小(imageData){
返回sharp(imageData.data).resize(150).toBuffer();
}

以下是
resize
方法(v0.27.2)的文档:

/**
*将图像大小调整为宽度、高度或宽度x高度。
*
*当同时提供宽度和高度时,图像应适合的可能方法如下:
*-覆盖:裁剪以覆盖两个提供的尺寸(默认值)。
*-包含:嵌入两个提供的尺寸内。
*-填充:忽略输入和拉伸与两个提供尺寸的纵横比。
*-内部:保留纵横比,将图像大小调整为尽可能大,同时确保其尺寸小于或等于指定的尺寸。
*-外部:保留纵横比,将图像大小调整为尽可能小,同时确保其尺寸大于或等于指定的尺寸。
*其中一些值基于object fit CSS属性。
*
*使用盖子或容器时,默认位置为中心。其他选择包括:
*-尖锐。位置:顶部、右顶部、右侧、右底部、底部、左底部、左侧、左侧顶部。
*重力:北、东北、东、东南、南、西南、西、西北、中心或中心。
*-sharp.strategy:仅覆盖,使用熵或注意力策略动态裁剪。其中一些值基于对象位置CSS属性。
*
*实验性的基于策略的方法调整大小,使一维处于其目标长度,然后重复排列边缘区域,
*根据所选策略丢弃得分最低的边。
*-熵:关注香农熵最高的区域。
*-注意:关注亮度频率、色彩饱和度和肤色最高的区域。
*
*可能的插值核包括:
*-最近:使用最近邻插值。
*-立方:使用Catmull Rom样条曲线。
*-lanczos2:使用a=2的Lanczos内核。
*-lanczos3:使用a=3(默认值)的Lanczos内核。
*
*@param width像素宽生成的图像应为。使用null或undefined自动缩放宽度以匹配高度。
*@param height像素高生成的图像应为。使用null或undefined自动缩放高度以匹配宽度。
*@param-options调整选项大小
*@throws{Error}无效参数
*@返回可用于链操作的sharp实例
*/
调整大小(宽度?:数字|空,高度?:数字|空,选项?:调整大小选项):锐利;

您需要的是
图像数据中的
数据
,从前端开始,使用
sharp
模块中的
调整大小
功能

以下是如何将图像宽度调整为150像素的示例:

从“sharp”导入sharp;
/*
*此函数将返回一个承诺
*/
异步函数调整大小(imageData){
返回sharp(imageData.data).resize(150).toBuffer();
}

以下是
resize
方法(v0.27.2)的文档:

/**
*将图像大小调整为宽度、高度或宽度x高度。
*
*当同时提供宽度和高度时,图像应适合的可能方法如下:
*-覆盖:裁剪以覆盖两个提供的尺寸(默认值)。
*-包含:嵌入两个提供的尺寸内。
*-填充:忽略输入和拉伸与两个提供尺寸的纵横比。
*-内部:保留纵横比,将图像大小调整为尽可能大,同时确保其尺寸小于或等于指定的尺寸。
*-外部:保留纵横比,将图像大小调整为尽可能小,同时确保其尺寸大于或等于指定的尺寸。
*其中一些值基于object fit CSS属性。
*
*使用盖子或容器时,默认位置为中心。其他选择包括:
*-尖锐。位置:顶部、右顶部、右侧、右底部、底部、左底部、左侧、左侧顶部。
*重力:北、东北、东、东南、南、西南、西、西北、中心或中心。
*-sharp.strategy:仅覆盖,使用熵或注意力策略动态裁剪。其中一些值基于对象位置CSS属性。
*
*实验性的基于策略的方法调整大小,使一维处于其目标长度,然后重复排列边缘区域,
*根据所选策略丢弃得分最低的边。
*-熵:关注香农熵最高的区域。
*-注意:关注亮度频率、色彩饱和度和肤色最高的区域。
*
*可能的插值核包括:
*-最近:使用最近邻插值。
*-立方:使用Catmull Rom样条曲线。
*-lanczos2:使用a=2的Lanczos内核。
*
    imageData {
      name: 'xyz.JPEG',
      data: <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff db 00 43 00 01 01 01 01 01 01 01 01 01 01 01 01
    01 01 01 01 01 01 01 01 01 01 01 01 01 ... 23589 more bytes>,
      size: 23639,
      encoding: '7bit',
      tempFilePath: '',
      truncated: false,
      mimetype: 'image/jpeg',
      md5: '899917d14fe775aa2097487e3ddcc9f6',
      mv: [Function: mv]
    }


But I am not understanding which function to use exactly for the format which I am getting to the backend. As I am not understanding exactly where the buffer output is being passed in the sharp package functions.
const sharp = require("sharp");

// Resize both width and height to max dimension.
async function resizeImageBuffer(imageBuffer, maxDimension) {
    const sharpImg = await sharp(imageBuffer);
    return sharpImg.resize({ width: maxDimension, height: maxDimension, fit: 'contain', background: { r: 255, g: 255, b: 255, alpha: 1 } }).toBuffer();
}

async function testResize(imgData) {
    console.log(`testResize: Resizing: ${imgData.name}...`);
    const MAX_DIMENSION = 64; 
    let resized = await resizeImageBuffer(imgData.data, MAX_DIMENSION);
    console.log(`testResize: resize complete: original: ${imgData.data.length} bytes, resized: ${resized.length} bytes.`);
    fs.writeFileSync(path.join(outputDir, imgData.name), resized);
} 

testResize(imgData);