// MARK: ViewFinder
const player = document.createElement('video')
// MARK: Switch
const switchOn = document.createElement('button')
switchOn.addEventListener('click', (e) => {
navigator.mediaDevices
.getUserMedia({ video: true })
.then((stream) => player.srcObject = stream)
})
const switchOff = document.createElement('button')
switchOn.addEventListener('click', (e) => {
player.srcObject.getVideoTracks().forEach((track) => track.stop())
})
// MARK: Shutter
const shutter = document.createElement('button')
shutter.addEventListener('click', (e) => {
const canvas = document.createElement('canvas')
const context = canvas.getContext('2d')
const { width, height } = player.getBoundingClientRect()
context.drawImage(player, 0, 0, width, height)
canvas.toBlob((blob) => {
// NOTE: Export as `File`
console.log(new File([blob], 'filename.png', {
type: 'image/png'
}))
})
// NOTE: Export as **base64**
console.log(canvas.toDataURL())
})
const input = document.createElement('input')
input.setAttribute('type', 'file')
input.setAttribute('accept', 'image/*')
input.setAttribute('capture', 'true') // value 可以為 `user` 或 `environment`
input.addEventListener('change', (e) => {
// NOTE: Export as `File`
console.log(e.target.files[0])
})
// MARK: Shutter
const shutter = document.createElement('button')
shutter.addEventListener('click', (e) => {
input.click()
})
- https://developers.google.com/web/fundamentals/media/capturing-images
- https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia