javascript - 使用 Canvas 居中缩小

标签 javascript canvas

我正在实现图像的缩小效果。但是在缩放和缩小之后,图像不再位于 Canvas 的中心。

这是我的代码:

var canvas = document.getElementById('canvas');
var image = document.getElementById('image');
var ctx = canvas.getContext("2d");
var zoomDelta = 0.025; // 10 steps in 10s, scale from 5 to 1
var currentScale = 5;

var img = new Image();
img.src = image.src;
img.onload = function() {
    ctx.canvas.width = img.width;
    ctx.canvas.height = img.height;
}

$("#start").on("click", function () {
    ctx.translate(canvas.width / 2, canvas.height / 2);
    drawImage();
    var zoom1 = window.setInterval(
        function() {
            if(currentScale < 1)
                window.clearInterval(zoom1);
            else                    
                reDraw();
        }, 50
    );
});

function reDraw() {
    currentScale -= zoomDelta;
    drawImage();
}

function drawImage() {
    clear();
    ctx.save();
    ctx.scale(currentScale, currentScale);
    ctx.drawImage(img, -img.width / 2, -img.width / 2);
    ctx.restore();
}

function clear() {
    ctx.clearRect(-img.width / 2 - 2, -img.width / 2 - 2, img.width + 4, img.height + 4);
}

提前致谢。

顺便说一句,这是它的 fiddle :http://jsfiddle.net/huynq/RK2D7/

最佳答案

转换到您想要使图像居中的点。

演示:http://jsfiddle.net/m1erickson/QEuw4/

var cx=canvas.width/2;
var cy=canvas.height/2;

ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.save();
ctx.translate(cx,cy);
ctx.scale(scale,scale);
ctx.drawImage(img,-img.width/2,-img.height/2);
ctx.restore();

关于javascript - 使用 Canvas 居中缩小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24544590/

相关文章:

HTML Canvas ;给定两个 X 和两个 Y,居中文本位于

javascript - 使用选定的背景保存 Canvas

jquery - 动画 stokeRect 不透明 Canvas

javascript - 如何限制 D3 Force 中元素的移动?

javascript - Chart JS 中的旋转图表

javascript - Jquery - 超过 1 个 "$(document).ready"= 脏代码?

javascript - 为什么我的函数不返回 float

javascript - JS 或 Jquery 创建唯一的 span ID

javascript - Facebook Like 按钮和应用程序 ID?

javascript - IE 10 和 android 4.x 上的 webcrypto 解决方案