node中new ImageData 或 new Image未定义 UnhandledPromiseRejectionWarning: ReferenceError: ImageData is no

错误信息如下

(node:12834) UnhandledPromiseRejectionWarning: ReferenceError: ImageData is not defined
    at /Users/y/Desktop/exps/server.js:133:19
    at done (/Users/y/Desktop/exps/ebag.js:178:17)
    at /Users/y/Desktop/exps/ebag.js:277:13
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:12834) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)

 

原因

node中不支持该函数使用

 

解决办法

在js浏览器端打印 new ImageData 可以看到结果如下(是初始化了像素点的整列)

 

我们可以自定义一个数组 进行处理

// 自定义像素整列空数组
let img = {
    data:[],
    height: 384,
    width: 384
}

 

Done

 

 

 

扩展参考

// 十进制图片信息
let result = <buffer>;

// 自定义像素整列空数组
let img = {
    data:[],
    height: 384,
    width: 384
}

// 计算buffer中对应每个像素点的RGB值
for (let i = 0, j = 0; i < result.length; i += 3, j += 4)
{
    img.data[j+0] = result[i+0]
    img.data[j+1] = result[i+1]
    img.data[j+2] = result[i+2]
    img.data[j+3] = 0xff
}
            
// 组合信息
let rawImageData = {
    data: img.data,
    width: 384,
    height: 384
}

// jpeg编码  需要 npm install jpeg-js (具体图片buffer为什么类型 就install && require对应的包)
let jpg_data = jpeg.encode(rawImageData, 50);

// jpeg编码后的图像数据 base64转码   需要 npm install base64-js
let jpg_data_base = base64.fromByteArray(jpg_data.data);

// 然后就可以以base64的方式渲染图片了

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值