【문제】종횡비를 유지하여 화상을 표시 【JavaScript, Canvas】

문제



이미지를 가로 세로 비율을 유지하면서 늘리고 캔버스의 중앙에 그립니다.
또한 이미지가 표시되지 않는 부분은 검게 채 웁니다.
※화상은 canvas와는 어스펙트비가 다른 것을 준비해 주세요.



해답 예


function onLoadBody() {
    var ctx = document.getElementById('canvas').getContext('2d'),
        img = new Image();
    img.src = "img/test1.png";
    img.onload = function() {
        var canvasAspect = ctx.canvas.width / ctx.canvas.height, // canvasのアスペクト比
            imgAspect = img.width / img.height, // 画像のアスペクト比
            left, top, width, height;

        ctx.fillStyle = "black";
        ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);

        if(imgAspect >= canvasAspect) {// 画像が横長
            left = 0;
            width = ctx.canvas.width;
            height = ctx.canvas.width / imgAspect;
            top = (ctx.canvas.height - height) / 2;
        } else {// 画像が縦長
            top = 0;
            height = ctx.canvas.height;
            width = ctx.canvas.height * imgAspect;
            left = (ctx.canvas.width - width) / 2;
        }
        ctx.drawImage(img, 0, 0, img.width, img.height, 
            left, top, width, height);
    };
}

해설



캔버스의 종횡비와 이미지의 종횡비를 구합니다.
이미지가 가로로 길면 캔버스의 상하에 틈이 생깁니다.
그 틈을 계산합니다.
이미지 쪽이 세로 길이인 경우, 캔버스의 좌우에 틈이 생기는군요.
그 틈을 계산합니다.

좋은 웹페이지 즐겨찾기