const fs = require('fs'); const path = require('path'); const puppeteer = require('puppeteer'); const contentType = 'image/png';

const launchBrowser = async () => { const browser = await puppeteer.launch({ args: [ '--disable-gpu', '--disable-dev-shm-usage', '--disable-setuid-sandbox', '--no-first-run', '--no-zygote', '--no-sandbox' ], headless: true, });

return browser; };

const autoScroll = async (page) => { return page.evaluate(() => { return new Promise((resolve, reject) => { var totalHeight = 0; var distance = 100; var timer = setInterval(() => { var scrollHeight = document.body.scrollHeight; window.scrollBy(0, distance); totalHeight += distance; if (totalHeight >= scrollHeight) { clearInterval(timer); resolve(); } }, 100); }); }); };

module.exports.handler = async (event, response, context) => { const input = JSON.parse(event.body).input; console.log('Input:', input);

const fileinput = ${Date.now()}.mmd; fs.writeFileSync(path.join(__dirname, fileinput), input);

const output = ${Date.now()}.png; const browser = await launchBrowser(); const page = await browser.newPage(); await page.emulateTimezone('Asia/Shanghai');

try { const html = fs.readFileSync(path.join(__dirname, 'template.html'), 'utf8'); const renderedHtml = html.replace('{{mermaid}}', input); const filehtml = ${Date.now()}.html; fs.writeFileSync(path.join(__dirname, filehtml), renderedHtml); let url = 'file://' + path.join(__dirname, filehtml); await page.goto(url, { waitUntil: 'networkidle2' }); await page.setViewport({ width: 1200, height: 800 }); await autoScroll(page); await page.screenshot({ path: path.join(__dirname, output), fullPage: true, type: 'png' });

console.log('Image generated:', output);
const imageStream = fs.createReadStream(path.join(__dirname, output));
response.setHeader('content-type', contentType);
response.send(imageStream);

} catch (err) { console.error(err); } finally { await browser.close(); } }

把代码中的tmp去掉放到根目录const fs = requirefs;const path = requirepath;const puppeteer = requirepuppeteer;const contentType = imagepng;const launchBrowser = async = const browser = await puppeteerlaunch a

原文地址: https://www.cveoy.top/t/topic/gKVS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录