在具有多个图像的HTML5 Canvas上实现平移/缩放

时间:2014-04-15 15:12:40

标签: javascript jquery canvas

我正在开发一个网站,用户可以在该网站上传图片,然后对其应用不同的效果(蒙版,短信等)。这是在HTML中调用canvas元素的方式:

<div>
   <div onload="draw();">
      <canvas id="canvas" data-girar="0">
          <div style="display:none;">
              <img onload="draw()" id="imgDisp" src="">
              <img id="maskDisp" src="">
          </div>
      </canvas>
    </div>
    <div id="text_content"></div>
</div>

两个图像相互叠加,“text_content”div也是如此。我想实现一个简单的平移/缩放功能,以便它们一起移动。有没有办法做到这一点?提前致谢。另外,这是draw();功能:

function draw() {

var canvas = document.getElementById('canvas');
var ctx = canvas.getContext('2d');
var newImg = document.getElementById('imgDisp');
var newMsk = document.getElementById('maskDisp');
var viewpanel = document.getElementById('view_panel');
var textcontent = document.getElementById('text_content');
document.getElementById("text_content").innerHTML = "";

canvas.width = 700;
canvas.height = 700;


if (newImg.height > 750 && newImg.width > 750){
    viewpanel.width = newImg.width/2;
    viewpanel.height = newImg.height/2;
    textcontent.style.height = "700px";
    textcontent.style.width = "700px";
    // Draw image
    ctx.drawImage(document.getElementById('imgDisp'),0,0,newImg.width/1.3,newImg.height/1.74);
    // Draw frame
    ctx.drawImage(document.getElementById('maskDisp'),0,0,newMsk.width/1.3,newMsk.height/1.74);
    text_size('1')
}
else if (newImg.height < 500 && newImg.width < 500){{}

    viewpanel.width = newImg.width;
    viewpanel.height = newImg.height;
    canvas.height = 240;
    canvas.width = 240;
    textcontent.style.height = "240px";
    textcontent.style.width = "240px";
    // Draw image
    ctx.drawImage(document.getElementById('imgDisp'),0,0,newImg.width*2,newImg.height*2);
    // Draw frame
    ctx.drawImage(document.getElementById('maskDisp'),0,0,newMsk.width*2,newMsk.height*2);
    text_size('2')
}

}

1 个答案:

答案 0 :(得分:0)

这是我制作的绘画应用程序的一部分的复制/粘贴。用户设置缩放级别(输入id为'zoom'),并在所有计算中使用它。无论缩放百分比是什么,你想要反转它(1 / n),因为我的标记为%,我使用100 / n。我的应用程序的平移功能来自外部div overflow: auto。我也没有把任何元素放在画布里面;画布具有背景图像,并且图形是可以保存为单独的png图像的叠加。我不确定这对你的情况有什么影响。

$('canvas').mousemove(function(e) {
    // x and y are globals, x inits to null, mousedown sets x, mouseup returns x to null
    if (x==null) return;
    x = (100/$('#zoom').val())*(e.pageX - $(this).offset().left);
    y = (100/$('#zoom').val())*(e.pageY - $(this).offset().top);
});