如何使用 Node.js 读取/写入图像?
Posted
技术标签:
【中文标题】如何使用 Node.js 读取/写入图像?【英文标题】:How can I Read/Write Images with Node.js? 【发布时间】:2021-03-29 14:20:27 【问题描述】:我对 JS 很陌生,我正在开发一个 Discord 机器人,它使用 Discord.js,它使用 COCO-SSD JS 并要求我从我的电脑读取/写入文件。
我知道这可能不是最好的主意,但当我到达时我会越过那座桥。
现在,我需要一种方法来在我的电脑上读写图像。
注意:文件需要从 URL 写入我的计算机。但是,如果有任何方法可以避免在我的电脑上下载图像,我也将不胜感激。
我正在使用“fs”、“https”和“fetch”。
我的方法的问题是我从图像中接收到的像素是NULL,所以我不能用它们做很多事情。
这是我当前的代码:
抱歉,格式很糟糕,英语不是我的母语,现在是凌晨 2 点。
const fetchUrl = require("fetch").fetchUrl;
const https = require('https');
function saveImageToDisk(url,path)
var fullUrl = url;
var localPath = fs.createWriteStream(path);
var request = https.get(fullUrl,function(response) console.log(response)
response.pipe(localPath)
);
saveImageToDisk("https://post.greatist.com/wp-content/uploads/sites/3/2020/02/322868_1100-1100x628.jpg","./images/" + Date.now + ".png");
const img = fs.readFile("./images/" + Date.now + ".png", function(response)console.log(response));
【问题讨论】:
【参考方案1】:我知道如何使用模块node-fetch
来实现这样的事情,所以我将在下面提供一个示例。我不知道你的 discord 机器人到底需要这个功能做什么,但下面的代码将能够正确地将图像 url 保存到指定路径。
const fetch = require("node-fetch");
const fs = require("fs");
function saveImageToDisk(url, path)
fetch(url)
.then(res => res.buffer())
.then(buffer => fs.writeFileSync(path, buffer));
我已经测试了上面的示例代码,它运行良好。至于其余的代码,我确实有一些修复:
const filepath = "./images/" + Date.now() + ".png";
const imageurl = "https://post.greatist.com/wp-content/uploads/sites/3/2020/02/322868_1100-1100x628.jpg";
saveImageToDisk(imageurl, filepath);
const img = fs.readFile(filepath, (err, response) =>
if (err) throw err;
console.log(response);
);
具体来说,主要问题是:
Date.now
是一个函数(因此应该是 Date.now()
)
您应该只创建一次文件路径字符串,而不是创建两次(为了准确和简单)
fs.readFile
的回调实际上将其错误对象作为第一个参数(因此您实际上将错误或缺少错误记录到控制台而不是响应/文件本身)。
完全有可能仅仅是这些问题导致您的代码无法工作,而您原来的 saveImageToDisk()
工作正常。请注意,无论如何,这些问题肯定会导致您阅读文件的方式出现问题。
【讨论】:
以上是关于如何使用 Node.js 读取/写入图像?的主要内容,如果未能解决你的问题,请参考以下文章
javascript [base64 string to image file]如何在node.js#Node.js中写入图像