Javascript 我想在画布的各个方向重新缩放我的图像,但它只朝右下角缩放 上下文
我有一张画布,在上面我画了一个图像。我想给它设置动画:图像应该在所有方向上放大(重新缩放)(垂直和水平扩展,向上、右、下和左侧,同时放大) 预期结果 在每次迭代中,图像向画布的顶部和底部、左侧和右侧移动x个像素:这是一次缩放。超出画布的图像像素将变得不可见 实际结果 在每次迭代中,图像都会向画布的底部和右侧移动x个像素:这是一次缩放。超出画布的图像像素将变得不可见 问题 图像向画布的底部和右侧移动x像素,而不是向画布的顶部和底部、左侧和右侧移动x像素 问题 如何使图像向画布的顶部和底部、左侧和右侧移动x像素 最小可测试示例 如何测试我的示例?Javascript 我想在画布的各个方向重新缩放我的图像,但它只朝右下角缩放 上下文,javascript,html,animation,canvas,Javascript,Html,Animation,Canvas,我有一张画布,在上面我画了一个图像。我想给它设置动画:图像应该在所有方向上放大(重新缩放)(垂直和水平扩展,向上、右、下和左侧,同时放大) 预期结果 在每次迭代中,图像向画布的顶部和底部、左侧和右侧移动x个像素:这是一次缩放。超出画布的图像像素将变得不可见 实际结果 在每次迭代中,图像都会向画布的底部和右侧移动x个像素:这是一次缩放。超出画布的图像像素将变得不可见 问题 图像向画布的底部和右侧移动x像素,而不是向画布的顶部和底部、左侧和右侧移动x像素 问题 如何使图像向画布的顶部和底部、左侧和右
var images=[..
)
ctx.drawImage(tmp\u canvas,-(tmp\u canvas.width-canvas.width)/2,-(tmp\u canvas.height-canvas.height)/2);
,它被授权在真实画布(其上下文为ctx
)中绘制缩放图像(来自名为“tmp\u canvas”的新画布).I除以2缩放图像减去真实画布之间的差值,这通常对应于绘制向左和向右展开的缩放图像。相同的技术用于顶部和底部
线索
console.log(-(tmp\u canvas.width-canvas.width)/2)
显示0,它不应该显示。tmp\u canvas.width
应该是缩放图像的宽度。canvas.width
应该是画布的宽度
index.HTML
创建最终视频
开始
var images=[“my_dir/my_img.jpg”];
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var img=新图像();
函数showSomeMedia(){
setImageListener();
setImageSrc();
}
函数setImageSrc(){
img.src=图像[0];
img.crossOrigin=“匿名”;
}
函数imgOnLoad(){
ctx.drawImage(img,0,0,canvas.width,canvas.height);
ctx.restore();
var tmp_canvas=canvas.cloneNode();
var tmp_ctx=tmp_canvas.getContext(“2d”);
函数zoomInCanvas(){
tmp_ctx.刻度(1.001,1.001);
clearRect(0,0,canvas.width,canvas.height);
ctx.drawImage(
tmp_画布,
-(tmp_canvas.width-canvas.width)/2,
-(tmp_canvas.height-canvas.height)/2
);
}
var i=0;
const interval=setInterval(函数(){
如果(i==100){
间隔时间;
}
tmp_ctx.clearRect(0,0,tmp_canvas.width,tmp_canvas.height);
tmp_ctx.drawImage(画布,0,0);
requestAnimationFrame(缩放画布);
i++;
}, 1000);
}
函数setImageListener(){
img.onload=函数(){
imgOnLoad();
};
}
$(“#开始”)。单击(函数(){
showSomeMedia();
});
事实上,translate
调用不会更改tmp\U画布的图像尺寸。因此,我必须计算这些新的宽度和高度,并将它们存储在parralel中。以下代码非常有效:
<html>
<head>
<title>Creating Final Video</title>
</head>
<body>
<button id="start">Start</button>
<canvas id="canvas" width=3200 height=1608></canvas>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
var images = [
'my_dir/my_img.jpg'
];
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var img = new Image();
function showSomeMedia() {
setImageListener();
setImageSrc();
}
function setImageSrc() {
img.src = images[0];
img.crossOrigin = "anonymous";
}
function imgOnLoad() {
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
ctx.restore();
var tmp_canvas = canvas.cloneNode();
var tmp_ctx = tmp_canvas.getContext("2d");
var img_new_width = tmp_canvas.width;
var img_new_height = tmp_canvas.height;
function zoomInCanvas() {
img_new_width *= 1.001
img_new_height *= 1.001
tmp_ctx.scale(1.001, 1.001);
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(tmp_canvas, -(img_new_width - canvas.width)/2, -(img_new_height - canvas.height)/2);
}
var i = 0;
const interval = setInterval(function() {
if(i == 100) {
clearInterval(interval);
}
tmp_ctx.clearRect(0, 0, tmp_canvas.width, tmp_canvas.height);
tmp_ctx.drawImage(canvas, 0, 0);
requestAnimationFrame(zoomInCanvas);
i++;
}, 1000);
}
function setImageListener() {
img.onload = function () {
imgOnLoad();
};
}
$('#start').click(function() {
showSomeMedia();
});
</script>
</body>
</html>
创建最终视频
开始
变量图像=[
'my_dir/my_img.jpg'
];
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var img=新图像();
函数showSomeMedia(){
setImageListener();
setImageSrc();
}
函数setImageSrc(){
img.src=图像[0];
img.crossOrigin=“匿名”;
}
函数imgOnLoad(){
ctx.drawImage(img,0,0,canvas.width,canvas.height);
ctx.restore();
var tmp_canvas=canvas.cloneNode();
var tmp_ctx=tmp_canvas.getContext(“2d”);
var img_new_width=tmp_canvas.width;
var img_new_height=tmp_canvas.height;
函数zoomInCanvas(){
img_新_宽度*=1.001
img\U新高度*=1.001
tmp_ctx.刻度(1.001,1.001);
clearRect(0,0,canvas.width,canvas.height);
ctx.drawImage(tmp_canvas,-(img_new_width-canvas.width)/2,-(img_new_height-canvas.height)/2);
}
var i=0;
const interval=setInterval(函数(){
如果(i==100){
间隔时间;
}
tmp_ctx.clearRect(0,0,tmp_canvas.width,tmp_canvas.height);
tmp_ctx.drawImage(画布,0,0);
requestAnimationFrame(缩放画布);
i++;
}, 1000);
}
函数setImageListener(){
img.onload=函数(){
imgOnLoad();
};
}
$(“#开始”)。单击(函数(){
showSomeMedia();
});
我不知道如何解决代码中的其他一些问题,但是我可以帮助您从各个方向重新缩放图像
$(文档).ready(函数(){
$(“#可调整大小”)。可调整大小({
手柄:“北、东、南、西、东北、东南、西南、西北”
});
});
#可调整大小{
宽度:50%;
边框:1px纯黑;
}
#可调整大小的img{
宽度:100%;
}
.ui可调整大小的句柄{
背景:红色;
边界: