Last active
March 3, 2025 23:33
-
-
Save bambooom/e6b0faaf2eeec11a80952a0c48b5decf to your computer and use it in GitHub Desktop.
use puppeteer to generate gif
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const fs = require('fs'); | |
const puppeteer = require('puppeteer'); | |
const GIFEncoder = require('gifencoder'); | |
const PNG = require('png-js'); | |
function decode(png) { | |
return new Promise(r => {png.decode(pixels => r(pixels))}); | |
} | |
async function gifAddFrame(page, encoder) { | |
const pngBuffer = await page.screenshot({ clip: { width: 1024, height: 768, x: 0, y: 0 } }); | |
const png = new PNG(pngBuffer); | |
await decode(png).then(pixels => encoder.addFrame(pixels)); | |
} | |
(async () => { | |
const browser = await puppeteer.launch({ | |
headless: true, slowMo: 0, | |
}); | |
const page = await browser.newPage(); | |
page.setViewport({width: 1024, height: 768}); | |
await page.goto('https://giphy.com/', { | |
waitUntil: ['networkidle0'] | |
}); | |
// record gif | |
var encoder = new GIFEncoder(1024, 768); | |
encoder.createWriteStream() | |
.pipe(fs.createWriteStream('test.gif')); | |
// setting gif encoder | |
encoder.start(); | |
encoder.setRepeat(0); | |
encoder.setDelay(150); | |
encoder.setQuality(10); // default | |
for (let i = 0; i < 10; i++) { | |
await gifAddFrame(page, encoder); | |
} | |
// finish encoder, test.gif saved | |
encoder.finish(); | |
await browser.close(); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment