Я получаю video
с камеры пользователя и отображаю ее на квадрате 1: 1. Затем у меня есть кнопка, которая делает снимок и рисует его на холст 1: 1, проблема в том, что он не нарисован в том же месте на холсте. Как я могу это достичь?Обрезать видео на холсте
Вот бегущий пример:
https://jsfiddle.net/90d3ar1m/
Вот HTML:
<!doctype html>
<html>
<head>
<title>Camera</title>
<meta http-equiv="Content-Security-Policy" content="default-src * data: gap: https://ssl.gstatic.com 'unsafe-inline'; style-src * 'unsafe-eval'; media-src 'self' blob:">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/camera.css">
</head>
<body>
<div class="container">
<div class="camera">
<video id="monitor" autoplay></video>
</div>
<canvas id="photo"></canvas>
<input type=button value="📷" onclick="snapshot()">
</div>
<script type="text/javascript" src="js/plugins/jquery.min.js"></script>
<script type="text/javascript" src="js/dist/pages/camera.js"></script>
</body>
</html>
Вот это CSS:
video {
width: 500px;
height: 500px;
object-fit: cover;
object-position: center;
}
.camera {
width: 500px;
height: 500px;
overflow: hidden;
}
Здесь машинописи:
let canvas: HTMLCanvasElement;
let video: HTMLVideoElement;
$(window).on('load', async event => {
video = <HTMLVideoElement>document.getElementById('monitor');
canvas = <HTMLCanvasElement>document.getElementById('photo');
video.srcObject = await navigator.mediaDevices.getUserMedia({ video: true });
video.onloadedmetadata =() => {
canvas.width = 500;
canvas.height = 500;
}
});
function snapshot() {
canvas.getContext('2d').drawImage(video, 0, 0);
}
Вы пробовали абсолютно позиционировать элементы на вершине eachother? –
Это будет просто перемещать элементы вокруг, что не повлияет на то, где оно нарисовано на холсте. –