Created
November 21, 2019 12:27
-
-
Save yishn/7cd65ea1db0ef2a1b7658f1364b2cb41 to your computer and use it in GitHub Desktop.
Take screenshot in the browser
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 canIRun = navigator.mediaDevices.getDisplayMedia | |
const takeScreenShot = async () => { | |
const stream = await navigator.mediaDevices.getDisplayMedia({ | |
video: { mediaSource: 'screen' }, | |
}) | |
// get correct video track | |
const track = stream.getVideoTracks()[0] | |
// init Image Capture and not Video stream | |
const imageCapture = new ImageCapture(track) | |
// take first frame only | |
const bitmap = await imageCapture.grabFrame() | |
// destory video track to prevent more recording / mem leak | |
track.stop() | |
const canvas = document.getElementById('fake') | |
// this could be a document.createElement('canvas') if you want | |
// draw weird image type to canvas so we can get a useful image | |
canvas.width = bitmap.width | |
canvas.height = bitmap.height | |
const context = canvas.getContext('2d') | |
context.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height) | |
const image = canvas.toDataURL() | |
// this turns the base 64 string to a [File] object | |
const res = await fetch(image) | |
const buff = await res.arrayBuffer() | |
// clone so we can rename, and put into array for easy proccessing | |
const file = [ | |
new File([buff], `photo_${new Date()}.jpg`, { | |
type: 'image/jpeg', | |
}), | |
] | |
return file | |
} | |
const button = document.getElementById('cake').onclick = () => canIRun ? takeScreenShot() : {} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment