|
16 | 16 | <hr /> |
17 | 17 |
|
18 | 18 | <div id="output"> |
19 | | - <strong>Capture images</strong> |
| 19 | + <strong>Capture images (아래 캡쳐된 이미지를 클릭하면 다운로드 할 수 있습니다)</strong> |
20 | 20 | <div id="images"></div> |
21 | 21 | </div> |
22 | 22 |
|
23 | 23 | <pre> |
24 | | - <code class="highlight">$(function() { |
25 | | - const videoEl = document.getElementById('video'); |
26 | | - const canvasEl = document.getElementById('canvas'); |
27 | | - const width = 350; |
28 | | - const height = 260; |
| 24 | + <code class="highlight">const $video = document.getElementById('video'); |
| 25 | +const $canvas = document.getElementById('canvas'); |
| 26 | +const width = 350; |
| 27 | +const height = 260; |
29 | 28 |
|
30 | | - /** |
31 | | - * getUserMedia 성공 |
32 | | - * @param stream |
33 | | - */ |
34 | | - function success(stream) { |
35 | | - videoEl.srcObject = stream; |
36 | | - } |
| 29 | +/** |
| 30 | + * 비디오 이미지 캡쳐 |
| 31 | + */ |
| 32 | +function capture() { |
| 33 | + const context = $canvas.getContext('2d'); |
| 34 | + context.drawImage($video, 0, 0, width, height); |
| 35 | + insertImage($canvas.toDataURL('image/png')); |
| 36 | +} |
37 | 37 |
|
38 | | - /** |
39 | | - * getUserMedia 실패 |
40 | | - * @param err |
41 | | - */ |
42 | | - function error(err) { |
43 | | - console.log('error', arguments); |
44 | | - } |
| 38 | +/** |
| 39 | + * 캡쳐한 이미지 노출 함수 |
| 40 | + * @param imageData |
| 41 | + */ |
| 42 | +function insertImage(imageData) { |
| 43 | + const $images = document.querySelector('#images'); |
| 44 | + const $img = document.createElement('img'); |
45 | 45 |
|
46 | | - /** |
47 | | - * 비디오 이미지 캡쳐 |
48 | | - */ |
49 | | - function capture() { |
50 | | - const context = canvasEl.getContext('2d'); |
51 | | - context.drawImage(videoEl, 0, 0, width, height); |
52 | | - insertImage(canvasEl.toDataURL('image/png')); |
53 | | - } |
| 46 | + $img.src = imageData; |
| 47 | + $images.insertBefore($img, $images.childNodes[0]); |
| 48 | +} |
54 | 49 |
|
55 | | - /** |
56 | | - * 캡쳐한 이미지 노출 함수 |
57 | | - * @param imageData |
58 | | - */ |
59 | | - function insertImage(imageData) { |
60 | | - $('#images').prepend("<img src=" + imageData + " />"); |
61 | | - } |
| 50 | +/** |
| 51 | + * getUserMedia 성공 |
| 52 | + * @param stream |
| 53 | + */ |
| 54 | +function success(stream) { |
| 55 | + $video.srcObject = stream; |
| 56 | +} |
| 57 | + |
| 58 | +/** |
| 59 | + * getUserMedia 실패 |
| 60 | + * @param err |
| 61 | + */ |
| 62 | +function error(err) { |
| 63 | + console.log('error', err); |
| 64 | + alert(err.message); |
| 65 | +} |
62 | 66 |
|
63 | | - /** |
64 | | - * 미디어 호출 |
65 | | - */ |
66 | | - async function startMedia() { |
67 | | - try { |
68 | | - const stream = await navigator.mediaDevices.getUserMedia({ |
69 | | - audio: false, |
70 | | - video: true, |
71 | | - }); |
72 | | - success(stream); |
73 | | - } catch (err) { |
74 | | - error(err); |
75 | | - } |
| 67 | +/** |
| 68 | + * 미디어 호출 |
| 69 | + */ |
| 70 | +async function startMedia() { |
| 71 | + try { |
| 72 | + const stream = await navigator.mediaDevices.getUserMedia({ |
| 73 | + audio: false, |
| 74 | + video: true, |
| 75 | + }); |
| 76 | + success(stream); |
| 77 | + } catch (err) { |
| 78 | + error(err); |
76 | 79 | } |
| 80 | +} |
77 | 81 |
|
78 | | - /** |
79 | | - * 초기 이벤트 바인딩 |
80 | | - */ |
81 | | - function initialize() { |
82 | | - canvasEl.width = width; |
83 | | - canvasEl.height = height; |
| 82 | +/** |
| 83 | + * 초기 이벤트 바인딩 |
| 84 | + */ |
| 85 | +function initialize() { |
| 86 | + $canvas.width = width; |
| 87 | + $canvas.height = height; |
84 | 88 |
|
85 | | - $('#btn-camera').click(startMedia); |
86 | | - $('#btn-capture').click(capture); |
87 | | - } |
| 89 | + document.querySelector('#btn-camera').addEventListener('click', startMedia); |
| 90 | + document.querySelector('#btn-capture').addEventListener('click', capture); |
| 91 | +} |
88 | 92 |
|
89 | | - initialize(); |
90 | | -}); |
| 93 | +initialize(); |
91 | 94 | </code> |
92 | 95 | </pre> |
93 | 96 | </div> |
|
0 commit comments