javascript - 在 Canvas2d HTML5 中放大和缩小不起作用
问题描述
我有一个 Canvas2d 播放视频,通过在播放视频时在画布上绘制每一帧。播放视频的功能如下所示:
function videoPlay() {
socket = io();
var timer_var = setInterval(myTimer, 10000);
socket.on('start', function () {
var canvasVideo = document.getElementById('canvas1');
var ctxVideo = canvasVideo.getContext("2d");
var streamingSource = parseInt("<%= Streaming_Source %>");
divSocket = io(location.origin + "/cam" + streamingSource);
divSocket.on('data', function (data) {
var bytes = new Uint8Array(data);
var blob = new Blob([bytes], {type: 'application/octet-binary'});
var url = URL.createObjectURL(blob);
var img = new Image;
img.onload = function () {
URL.revokeObjectURL(url);
ctxVideo.drawImage(img, 0, 0, canvasVideo.width, canvasVideo.height);
};
img.src = url;
}
}
}
这是我的 HTML:
<div class="div_2_1_canvas">
<canvas id='canvas2' width='920' height='680' class="w-100" style='position:relative'>
</canvas>
<div class="zoom-buttons">
<input type="button" id="plus" value="+" style="width: 35px; height: 35px; position: absolute; left: 75%; bottom: 43%; border-radius: 50%; border: 1px solid white; background-color: white; text-align: center;"></input>
<input type="button" id="minus" value="-"style="width: 35px; height: 35px; position: absolute; left: 75%; bottom: 40%; border-radius: 50%; border: 1px solid white; background-color: white">
</div>
</div>
最后,这就是我的缩放/缩放功能的样子:
var scale = 1.0;
var scaleMultiplier = 0.8;
var translatePos = {
x: canvasVideo.width / 2,
y: canvasVideo.height / 2
};
document.getElementById("plus").addEventListener("click", function (e) {
scale /= scaleMultiplier;
var canvasVideo = document.getElementById('canvas1');
var ctxVideo = canvasVideo.getContext("2d");
ctxVideo.translate(translatePos.x, translatePos.y);
ctxVideo.scale(scale, scale);
}, false);
document.getElementById("minus").addEventListener("click", function () {
scale *= scaleMultiplier;
var canvasVideo = document.getElementById('canvas1');
var ctxVideo = canvasVideo.getContext("2d");
ctxVideo.translate(translatePos.x, translatePos.y);
ctxVideo.scale(scale, scale)
}, false);
放大时效果很好,但是当我缩小并且比例值变得小于 0.5 时,视频会变得混乱,看起来像这样:
知道为什么会发生这种情况以及如何解决吗?
解决方案
推荐阅读
- javascript - 提取由'-'分隔的子字符串
- reactjs - Webpack SplitChunksPlugin 跳过块名称中的数字 - ReactJS
- javascript - 模拟点击动态渲染的 React 元素
- java - 对来自 JSON 的数据进行分组并显示在列表中
- python - SQLite 未正确存储 int,将其存储为 b'\x06\x00\x00\x00'
- http - 如何允许所有具有 CSP 标头的帧祖先?
- reactjs - 无法使用(获取的)上下文(提供者)中的值作为我的 useState 的输入
- javascript - 拆分函数总是返回空数组 [Browserstack, IOS devices]
- node.js - 检查两个对象之间的相似性和相关性
- python - 预期类型“ItemsView”,改为“AbstractSet[Tuple[Any, Any]]”