2013-02-05 3 views
3

이미지 데이터를 잃지 않고 HTML5 캔버스에서 이미지를 회전하는 방법은 무엇입니까? 회전을하면 이미지 크기가 커지므로 Canvas 컨테이너를 확장하여 이미지가 잘리지 않도록하고 싶습니다. 다음 이미지가 더 좋다고 말할 수 있습니다. enter image description here이미지가 잘리지 않도록 캔버스에서 이미지를 회전하고 부모를 확장하는 방법은 무엇입니까?

갈색 색 상자는 실제로 Canvas를 래핑하는 컨테이너입니다. 캔버스를 회전 할 때 이미지를 잘리지 않도록 이미지를 확대하고 싶습니다.

업데이트 : 이미지가 캔버스보다 클 수 있으므로 경계 상자를 사용하여 부모 컨테이너로 비례 크기를 계산하여 이미지에 맞 춥니 다. 따라서 Canvas의 style 크기는 계산 된 크기가되는 반면 높이 및 너비 특성은 이미지 크기가됩니다.

도움을 주시면 감사하겠습니다.

답변

4

이 함수는 회전 된 이미지에 정확하게 맞게 캔바스의 크기를 조정합니다. 이미지의 폭과 높이를 제공해야하며 각도는 현재 회전 각도입니다.

[편집 : OOPS! 나는 캔버스 너비/높이가 큰 이봐하지 CSS를 너비/높이]

function resizeCanvasContainer(w,h,a){ 
var newWidth,newHeight; 
    var rads=a*Math.PI/180; 
    var c = Math.cos(rads); 
    var s = Math.sin(rads); 

    if (s < 0) { s = -s; } 
    if (c < 0) { c = -c; } 
    newWidth = h * s + w * c; 
    newHeight = h * c + w * s ; 

var canvas = document.getElementById('canvas'); 
canvas.width = newWidth + 'px'; 
canvas.height = newHeight + 'px'; 
} 
+0

, 변경해야 ... 라디안 각도를 변환 ... 그리고해야 ... 나는거야 이 시도...! 또한이 사실을 알기를 바란다. 경계 상자와 같은 부모 컨테이너를 기반으로하는 캔버스의 스타일 치수를 계산하는 것은 이미지가 컨테이너보다 너무 많은 시간이기 때문이다. 이 사실이이 솔루션에 영향을 줍니까? –

+0

그것은 여전히 ​​내 캔버스 형제, 따라서 이미지 모서리를 잃고 절단입니다! –

+1

캔버스가 캔버스 밖으로 떨어지지 않고 360도 회전 할 수 있도록 캔버스 크기를 조정할 수있는 방법을 보여주는 jsFiddle은 다음과 같습니다 ..... http://jsfiddle.net/m1erickson/CuRan/4/ – markE

관련 문제