在画布上裁剪视频
Crop video on canvas
我从用户的相机中获取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;
}
下面是TypeScript:
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);
}
你的问题似乎是由于video
元素保持视频的长宽比,而画布没有。还要记住ctx。drawImage最多接受8个位置和大小参数:
context.drawImage(img/vid,sx,sy,swidth,sheight,x,y,width,height);
我做了一些测试,发现这工作得很好,但你的里程可能会有所不同:.drawImage(video,80,0,480,500,0,0,500,520);
我用这些数字做了一个jsFiddle,看看它是否适合你。
W3Schools有一些关于如何工作的很好的文档,我建议阅读:http://www.w3schools.com/tags/canvas_drawimage.asp
你可以使用视频的videoWidth
和videoHeight
属性来计算drawImage
中不同宽高比源视频需要的数字
相关文章:
- 视频HTML没有'无法在Internet Explorer 11上工作
- 播放当前视频时如何停止其他视频?JavaScript
- 使用Facebook live API创建实时视频对象时的隐私设置
- Brightcove获取/显示HTML中的当前视频标题和描述
- Twilio-显示所有连接参与者的远程参与者视频
- WebRTC视频聊天可以在FF中使用,但不能在Chrome中使用
- 是否可以使用iframe API在iOS浏览器上播放youtube视频
- 如何检查用户在html5视频播放器中观看了完整的视频
- Fullpage.js-视频+背景在同一部分
- html5视频中的Youtube类型注释
- 角度p2p视频聊天-远程流是黑视频
- tiltSlider播放/暂停视频元素(如果li有当前类)
- 可以在响应时隐藏iphone上的“播放”按钮以进行视频播放
- Javascript-在视频中跟踪鼠标位置
- 为什么可以'我在视频js中查看HLS
- 如何在javascript中解析Dailymotion视频Url
- Mozilla没有;t在附加视频src后触发视频后台事件
- 使用javascript将视频从我的android应用程序上传到youtube
- 在 HTML 中裁剪视频
- 在画布上裁剪视频