如何解决使用 node.js 从 URL 读取图像
请原谅我对 node 的无知。
我需要通过 url 读取图像并通过sharp调整其大小。
目前我是这样阅读本地的。
例如。 我想阅读这张图片 url="https://miami.pfsrealty.com/wp-content/uploads/2020/02/Miami-y-su-bahia-con-nubes-al-atardecer-Compressed.jpg"
我当前的代码是这样的。
return new Promise(async (resolve,reject) => { const fileSystem = require('fs');
const image = fileSystem.readFileSync(directoryPath,'base64');
const sharp = require('sharp');
const height: number = parseInt(heightString);//parameter
const width: number = parseInt(widthString);//parameter
let img = new Buffer(image,'base64');
await sharp(img)
.resize(height,width)
.toBuffer()
.then(resizedImageBuffer => {
const resizedImageData = resizedImageBuffer.toString('base64');
resolve(resizedImageData);
})
.catch(error => {
// error handeling
reject(error);
});
});
应该如何调用? 谢谢!
解决方法
试试这个
const sharp = require('sharp');
const fs = require('fs');
function readAndSave(url,width = 300,height = 300) {
const filename = url.replace(/^.*[\\\/]/,'');
require('axios').get(url,{ responseType: 'arraybuffer' })
.then((response) => {
return Buffer.from(response.data,"utf-8")
}).then((buffer) => {
return new Promise((resolve,reject) => {
sharp(buffer)
.resize(height,width)
.toBuffer()
.then(resizedImageBuffer => {
const resizedImageData = resizedImageBuffer.toString('base64');
const buf = Buffer.from(resizedImageData,'base64');
fs.writeFile(`./${filename}`,buf,function (err) {
if (err) throw err;
});
resolve()
})
.catch(error => {
// error handeling
reject(error);
});
})
}).catch(error => {
console.log('error',error)
});
}
readAndSave('https://miami.pfsrealty.com/wp-content/uploads/2020/02/Miami-y-su-bahia-con-nubes-al-atardecer-Compressed.jpg');
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。