如何将 html 画布转换为图像,然后将该画布绘制到画布上

Posted

技术标签:

【中文标题】如何将 html 画布转换为图像,然后将该画布绘制到画布上【英文标题】:How to turn an html canvas into an image and then draw that canvas onto the canvas 【发布时间】:2021-11-23 20:43:36 【问题描述】:

我目前正在开发一个 html canvas javascript 游戏,它即将完成,但我想扩大画布以使整个游戏更大。我尝试使用类似的东西

var imgData = ctx.getImageData(0, 0, 300, 500);

ctx.putImageData(imgData,0,0,0,0,360,600)

但是使用这种方法我无法增加图像的大小。最好的方法是什么?

【问题讨论】:

【参考方案1】:

有多种方法可以实现这一点,我尝试过的两种方法是使用 2 个单独的画布,putImageData 有点奇怪,并且不适用于放大,我建议使用单独的canvas,放大版的大小,然后使用 ctx.drawImage 在放大版上绘制第一张画布:

var c = document.getElementById('c');
var ctx = c.getContext('2d');

var c2 = document.getElementById('c2');
var ctx2 = c2.getContext('2d')

ctx.fillStyle = "red";
ctx.fillRect(10,10,100,100)

var scaleX = c2.width / c.width;
var scaleY = c2.height / c.height;

ctx2.drawImage(c,0,0,c2.width,c2.height)
canvas
  border: 2px solid black
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>repl.it</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <canvas id="c"  ></canvas>
    <canvas id="c2"   ></canvas>
    <script src="script.js"></script>
  </body>
</html>

另一种方法是放大上下文,然后在 0,0 处绘制图像,不指定宽度或高度:

var c = document.getElementById('c');
var ctx = c.getContext('2d');

var c2 = document.getElementById('c2');
var ctx2 = c2.getContext('2d')

ctx.fillStyle = "red";
ctx.fillRect(10,10,100,100)

var scaleX = c2.width / c.width;
var scaleY = c2.height / c.height;

ctx2.scale(scaleX,scaleY)
ctx2.drawImage(c,0,0)
ctx2.scale(1/scaleX,1/scaleY)
canvas
  border: 2px solid black
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>repl.it</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <canvas id="c"  ></canvas>
    <canvas id="c2"   ></canvas>
    <script src="script.js"></script>
  </body>
</html>

另一种选择是使用 css scale() 标记,但这会与鼠标点击相混淆,而且真的很烦人,所以我不会那样做。请记住,所有放大画布的方法(除非您放大坐标和重绘)都会导致模糊。

希望这会有所帮助:D

【讨论】:

以上是关于如何将 html 画布转换为图像,然后将该画布绘制到画布上的主要内容,如果未能解决你的问题,请参考以下文章

如何将 BitmapData 从 Flash 转换为画布 HTML?

将fabricjs画布转换为base64图像

我们如何在 html5 画布上绘制调整大小的图像?

如何在画布上绘制并转换为位图?

无法在javascript中将图像绘制到画布

图像到画布 / HTML5 转换 [关闭]