【问题标题】:Read images with node.js from URL使用 node.js 从 URL 读取图像
【发布时间】:2021-07-15 04:56:28
【问题描述】:

请原谅我对节点的无知。

我需要通过 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);
                });
        });

电话应该怎么打? 谢谢!

【问题讨论】:

    标签: javascript node.js bufferedimage sharp


    【解决方案1】:

    试试这个

    
    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');
    
    

    【讨论】:

    • 非常感谢您的回答我已经设置了这样的方法,但它会产生此错误:(节点:25276)UnhandledPromiseRejectionWarning:错误:GetAddrInfoReqWrap.onlookup 的 getaddrinfo ENOTFOUND 8469 [as oncomplete] (dns.js:67:26) (node:25276) UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志
    • 更新了代码。尝试完整的。 getaddrinfo ENOTFOUND 可以是 url 找不到。做 npm i --save axios。我正在使用节点 14
    • 是的 .. 谢谢兄弟!!
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    • 2021-01-19
    • 2021-05-15
    • 2017-01-28
    相关资源
    最近更新 更多