木偶:无需单独下载即可获取base64编码的图像

时间:2019-08-29 12:47:58

标签: node.js uri puppeteer

在一个不支持下载图像或在新标签页中打开它们的页面上,我可以使用Chrome开发人员(工具->网络)右键单击该图像并执行“将图像作为URI复制”。

是否有可能对木偶戏做同样的事情?

我尝试使用一些旨在将图像转换为base64表示形式的Node.js模块,但它们似乎都下载了图像,然后返回base64表示形式。

2 个答案:

答案 0 :(得分:4)

是的,您可以使用response.buffer()获取资源的缓冲区。然后,您可以使用buffer.toString('base64')将缓冲区转换为base64编码的字符串。

代码示例

以下示例转到google.com网站,等待第一个PNG资源,然后打印其base64编码的图像。

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    const [response] = await Promise.all([
        page.waitForResponse(response => response.url().includes('.png')),
        page.goto('https://www.google.com/')
    ]);
    const buffer = await response.buffer();
    console.log('data:image/png;base64,' + buffer.toString('base64'));

    await browser.close();
})();

此代码示例等待单个资源。另外,您可以听response事件以相同的方式下载多张图片。

答案 1 :(得分:3)

另一个解决方案是:

const base64 = await page.screenshot({ encoding: "base64" })