javascript - 使用 .scale() 调整 HTML Canvas 大小

标签 javascript html canvas

我正在尝试调整 <canvas> 的大小已经绘制了图像,但我误解了如何使用 canvas.scale()方法,因为它不会收缩...

代码:

ImageRender.prototype.resizeTo = function () {

    var canvas          = $('#myCanvas')[0];
    var ctx             = canvas.getContext("2d");

    //current image
    var currImg         = ctx.getImageData(0, 0, canvas.width, canvas.height);

    //
    var tempCanvas      = $('canvas')[0];
    var tempCtx         = tempCanvas.getContext("2d");
    tempCtx.putImageData(currImg, 0, 0)

    //
    ctx.scale(0.5, 0.5);

    //redraw
    ctx.drawImage(tempCanvas, 0, 0);
  };

我忽略了什么?

谢谢!

最佳答案

在调整原始 Canvas 大小时,您可以通过将内容从临时 Canvas “弹回”来缩放带有内容的 Canvas 。此保存+重绘过程是必要的,因为当您调整 Canvas 宽度或高度时, Canvas 内容会自动清除。

示例代码:

enter image description here

var myCanvas=document.getElementById("canvas");
var ctx=myCanvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var tempCanvas=document.createElement("canvas");
var tctx=tempCanvas.getContext("2d");

var img=new Image();
img.crossOrigin='anonymous';
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/multple/Dog-With-Cute-Cat.jpg";
function start(){
  myCanvas.width=img.width;
  myCanvas.height=img.height;
  ctx.drawImage(img,0,0);
  resizeTo(myCanvas,0.50);
}

function resizeTo(canvas,pct){
  var cw=canvas.width;
  var ch=canvas.height;
  tempCanvas.width=cw;
  tempCanvas.height=ch;
  tctx.drawImage(canvas,0,0);
  canvas.width*=pct;
  canvas.height*=pct;
  var ctx=canvas.getContext('2d');
  ctx.drawImage(tempCanvas,0,0,cw,ch,0,0,cw*pct,ch*pct);
}
body{ background-color: ivory; }
#canvas{border:1px solid red; margin:0 auto; }
<h4>Canvas resized to 50%</h4>
<canvas id="canvas" width=300 height=300></canvas>
<h4>Img with original image</h4>
<img src='https://dl.dropboxusercontent.com/u/139992952/multple/Dog-With-Cute-Cat.jpg'>

关于javascript - 使用 .scale() 调整 HTML Canvas 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34866171/

相关文章:

javascript - 在 Canvas 上绘制 X 的正弦 Y

javascript - 通过字符串路径访问嵌套的 JavaScript 对象和数组

javascript - 使用 Angularjs 计算总价和数量

css - 堆叠 Canvas 移除默认透明度 HTML

javascript - jquery 表单提交 - 显示 div 并提交

javascript - html5 canvas正确绘制立方体

javascript - 更改 dc.js 折线图中的数据组并重新绘制它

javascript - 如何使用 React 解密 Laravel cookie

html - plupload跨域上传200 http错误

javascript 拼接导致 Canvas 滞后