使用puppeteersharp返回Image base 64,而不将文件保存在硬盘中

问题描述

我正在使用puppeteersharp将HTML转换为图像:

https://www.puppeteersharp.com/examples/index.html

这将获取HTMl并保存图像,然后我将返回base64图像,我希望返回图像base64,而不将其保存在硬盘驱动器中。

这是代码

          await new browserFetcher().DownloadAsync(browserFetcher.DefaultRevision);
           var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = true
        });
        var page = await browser.NewPageAsync();

        await page.SetViewportAsync(new ViewPortOptions
        {
            Width = 750,Height = 750,});

        await page.SetContentAsync("<h2>Test</h2>");
        await page.ScreenshotAsync(@"/Users/myname/Documents/puppeteertests/test1.jpg");

        byte[] b = System.IO.File.ReadAllBytes(@"/Users/myname/Documents/puppeteertests/test1.jpg");
        return Convert.ToBase64String(b);

解决方法

我在想类似的事情可能应该起作用- 它使用页面的“ ScreenshotStreamAsync”方法返回的Stream并将其复制到MemoryStream,以便我们可以真正简单地从中获取字节数组并将该字节数组传递给Convert.ToBase64String

var thing =  await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
        var browser = await Puppeteer.LaunchAsync(new LaunchOptions
        {
            Headless = false
        });
        var page = await browser.NewPageAsync();

        await page.SetViewportAsync(new ViewPortOptions
        {
            Width = 750,Height = 750,});

        await page.SetContentAsync("<h2>Test</h2>");
        await page.ScreenshotAsync(@"test1.jpg");

        using (var memStream = new MemoryStream())
        {
           page.ScreenshotStreamAsync().Result.CopyTo(memStream);
           var mything = Convert.ToBase64String(memStream.ToArray());
           Console.WriteLine(mything);
        }