+
96
-

回答

使用ew ImageCapture(videoTrack)与navigator.mediaDevices.getUserMedia实现,完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Camera Capture</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            display: flex;
            flex-direction: column;
            align-items: center;
            justify-content: center;
            height: 100vh;
            margin: 0;
        }
        #preview {
            margin-top: 20px;
            max-width: 80%;
        }
        button {
            margin-top: 20px;
        }
    </style>
</head>
<body>
    <h1>Camera Capture</h1>
    <button onclick="capturePhoto()">拍照</button>
    <img id="preview" ref="previewImg" alt="Captured Photo">
    <a id="downloadLink" style="display: none;">下载图片</a>

    <script>
        var selectedVideoDevice = null;
        var mediaBlob = null;
        var mediaBlobUrl = null;
        var downloadButtonText = '下载图片';

        function capturePhoto() {
            var constraints = {
                video: { deviceId: selectedVideoDevice ? { exact: selectedVideoDevice } : undefined }
            };

            navigator.mediaDevices.getUserMedia(constraints)
                .then(stream => {
                    var videoTracks = stream.getVideoTracks();
                    var videoTrack = videoTracks[0];
                    var imageCapture = new ImageCapture(videoTrack);
                    return imageCapture.takePhoto();
                })
                .then(blob => {
                    mediaBlob = blob;
                    mediaBlobUrl = URL.createObjectURL(blob);
                    downloadButtonText = '下载图片';

                    document.getElementById('preview').src = mediaBlobUrl;
                    var downloadLink = document.getElementById('downloadLink');
                    downloadLink.href = mediaBlobUrl;
                    downloadLink.download = 'captured_photo.png';
                    downloadLink.textContent = downloadButtonText;
                    downloadLink.style.display = 'block';
                })
                .catch(error => {
                    console.error('拍照失败:', error);
                });
        }
    </script>
</body>
</html>

网友回复

我知道答案,我要回答