캔버스 drawimage가 CSS 높이와 너비가있는 이미지에서 제대로 작동하지 않습니다.

Vignesh

캔버스로 이미지 돋보기를 작성하려고하는데 잘 작동하지만 문제는 이미지 위에 마우스를 올려 놓으면 캔버스에 그려진 이미지가 이미지의 마우스 위치를 기반으로 올바르게 배치되지 않는다는 것입니다.

여기 에서 문제를 볼 수 있습니다.

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Magnifier</title>

<style type="text/css">
canvas
{
    border:1px solid #000;
    width:150px;
    height:150px;
    border-radius:80px;
    position:absolute;
}
</style>
</head>
<body>
<img src="natural.jpg" height="400" id="image" width="600" onMouseMove="move(event);">
<canvas id="magnifier"></canvas>
<input type="button" name="magnify" id="magnify" value="magnify" onClick="magnify()" />
</body>
</html>
<script type="text/javascript">
var flag = 0;
var lens = document.getElementById('magnifier');
var img = document.getElementById('image');
var ctx=lens.getContext("2d");
function magnify()
{
    flag = 1;
}
function move(e)
{
    if(flag == 1)
    {
        var co_ord = getImageCoords(e,img);

        var x = co_ord['x']+img.offsetLeft;
        var y = co_ord['y']+img.offsetTop;
        draw(x,y);
        /*lens.style.top = y+"px";
        lens.style.left = x+"px";*/

    }
}
 function getImageCoords(event,img) {
        var cords = new Array;
        cords['x'] = event.offsetX?(event.offsetX):event.pageX-img.offsetLeft;
        cords['y'] = event.offsetY?(event.offsetY):event.pageY-img.offsetTop;
        return cords;
    }
    function draw(a,b)
    {
    ctx.clearRect(0,0,lens.width,lens.height);
    ctx.drawImage(img,a,b,150,150,0,0,300,150);
    }
</script>
Acarlon

주요 문제는 원본 이미지를 640 x 400 img 요소로 강제하여 크기를 조정한다는 것입니다. 실제 이미지는 상당히 큽니다. 너비와 높이는 프레젠테이션 ctx.drawImage(img,a,b,150,150,0,0,300,150);설정일 뿐이므로 이미지를 그릴 때 원래 크기가 조정되지 않은 이미지를 그리는 것입니다. 이는 마우스 좌표가 원본 이미지의 위치와 일치하지 않음을 의미합니다.

두 가지 옵션을 볼 수 있습니다.

1. 캔버스에 그려서 원본 크기 조정

여기에서 업데이트를 참조 하십시오 . 전에 cssdeck을 사용 하지 않았으므로 제대로 저장하지 않은 경우를 대비 하여 여기에 바이올린 이 있습니다. 기본적으로 이미지의 크기를 캔버스 (resizeCanvas)로 조정 한 다음이 캔버스를 드로잉에 사용합니다.

관련 HTML :

<canvas id='resizeCanvas' height='400' width='600' onMouseMove="move(event);"></canvas>

관련 JavaScript :

var ctxR=resizeCanvas.getContext("2d");
ctxR.drawImage(theImg,0,0,600,400);

내가 만든 몇 가지 다른 조정이 있습니다. 먼저 돋보기 캔버스에서 너비 및 높이 속성을 직접 지정해야합니다. 그렇지 않으면 이것이 CSS와 다른 경우 스케일링이 발생합니다. 그런 다음 다음과 같이 크기를 두 배로 늘리기 위해 배율을 조정할 수 있습니다.

ctx.drawImage(img,a,b,150,150,0,0,300,300);

이 접근 방식의 유일한 단점은 업로드하는 고해상도 이미지가 있고 확대 할 때 일부 품질이 손실된다는 것입니다. 따라서 더 나은 접근 방식은 dom에 추가하지 않고 원본 이미지를로드 한 다음 원본 이미지에 맞게 x, y 좌표를 변환하는 것입니다. 두 번째 접근 방식은 다음과 같습니다.

2. x, y 좌표 크기 조정 (더 나은 품질)

여기 에서 업데이트를 참조 하십시오 ( 여기 에서도 바이올린 ). 보시다시피 품질이 훨씬 좋습니다.

여기에서 원본 이미지를로드합니다.

var origImage = document.createElement('img');
var origImage.src = '<image source>'

그런 다음 적절하게 확장하십시오.

scaleX = origImage.width/img.width;
scaleY = origImage.height/img.height;
    ctx.clearRect(0,0,lens.width,lens.height);
    ctx.drawImage(img,a*scaleX,b*scaleY,150,150,0,0,150,150);

캔버스에 그릴 때 원본 이미지의 크기를 실제로 조정하지 않고 (모든 경우 너비와 높이가 150 임) 더 큰 기본 크기로 표시하는 것입니다. 작은 이미지의 경우 일부 퍼지 요소에 따라 크기를 조정할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

높이와 최대 높이가 flexbox의 내 이미지에서 작동하지 않습니다.

분류에서Dev

이미지 너비와 높이가 jQuery에서 제공되지 않습니다.

분류에서Dev

Android에서 PHP 서버로 이미지 업로드가 제대로 작동하지 않습니다.

분류에서Dev

svg 이미지가 캔버스에서 제대로 확장되지 않음

분류에서Dev

CSS 클래스가 제대로 작동하지 않습니다.

분류에서Dev

css 클래스가 제대로 작동하지 않습니다.

분류에서Dev

투명 캔버스보기 안드로이드에서 지우개가 작동하지 않습니다.

분류에서Dev

버튼의 이미지가 QT에서 제대로 작동하지 않습니다.

분류에서Dev

캔버스가 적절한 너비와 높이를 표시하지 않습니다. chart.js

분류에서Dev

CSS 페이지 나누기 방지가 HTML 캔버스 요소에 대해 작동하지 않음

분류에서Dev

서버에서 이미지 업로드가 작동하지 않습니다. localhost에서 잘 작동합니다.

분류에서Dev

CSS 최소 높이가 제대로 작동하지 않음

분류에서Dev

캔버스 context.measureText가 제대로 작동하지 않음

분류에서Dev

캔버스가 기본 이미지 그리기에서 작동하지 않음

분류에서Dev

캔버스 drawImage가 작동하지 않음

분류에서Dev

캔버스 drawImage가 작동하지 않음

분류에서Dev

JS-캔버스 이미지가 크롬에서 제대로 작동하지 않음 (또는 이미지가 제대로로드 될 때까지 기다리는 방법)

분류에서Dev

캔버스에서 조건이 제대로 작동하지 않는 경우

분류에서Dev

이미지 Xcode가있는 버튼에서 제약 조건이 작동하지 않습니다.

분류에서Dev

입력 필드가있는 동안 캔버스에서 tkinter 확인란이 작동하지 않습니다.

분류에서Dev

SVG <use> 요소에서 너비와 높이가 작동하지 않습니다.

분류에서Dev

steps () 함수가있는 CSS 이미지 스프라이트 애니메이션이 내 이미지에서 작동하지 않습니다.

분류에서Dev

CSS : 이미지 너비와 높이가 CSS에 설정되어 있어도 동일하게 나타나지 않습니다.

분류에서Dev

Firefox에서 CSS 스프라이트가 제대로 작동하지 않음

분류에서Dev

선호하는 백 버퍼 높이 및 너비 교차가 제대로 작동하지 않음

분류에서Dev

너비와 높이가 작동하지 않는 것 같습니다.

분류에서Dev

CSS 이미지 호버 효과가 예상대로 작동하지 않습니다.

분류에서Dev

jquery DataTable 서버 측 추가 행이 제대로 작동하지 않습니다.

분류에서Dev

캔버스가 로컬에서 작동하지 않고 TRYIT에서 작동하는 이유

Related 관련 기사

  1. 1

    높이와 최대 높이가 flexbox의 내 이미지에서 작동하지 않습니다.

  2. 2

    이미지 너비와 높이가 jQuery에서 제공되지 않습니다.

  3. 3

    Android에서 PHP 서버로 이미지 업로드가 제대로 작동하지 않습니다.

  4. 4

    svg 이미지가 캔버스에서 제대로 확장되지 않음

  5. 5

    CSS 클래스가 제대로 작동하지 않습니다.

  6. 6

    css 클래스가 제대로 작동하지 않습니다.

  7. 7

    투명 캔버스보기 안드로이드에서 지우개가 작동하지 않습니다.

  8. 8

    버튼의 이미지가 QT에서 제대로 작동하지 않습니다.

  9. 9

    캔버스가 적절한 너비와 높이를 표시하지 않습니다. chart.js

  10. 10

    CSS 페이지 나누기 방지가 HTML 캔버스 요소에 대해 작동하지 않음

  11. 11

    서버에서 이미지 업로드가 작동하지 않습니다. localhost에서 잘 작동합니다.

  12. 12

    CSS 최소 높이가 제대로 작동하지 않음

  13. 13

    캔버스 context.measureText가 제대로 작동하지 않음

  14. 14

    캔버스가 기본 이미지 그리기에서 작동하지 않음

  15. 15

    캔버스 drawImage가 작동하지 않음

  16. 16

    캔버스 drawImage가 작동하지 않음

  17. 17

    JS-캔버스 이미지가 크롬에서 제대로 작동하지 않음 (또는 이미지가 제대로로드 될 때까지 기다리는 방법)

  18. 18

    캔버스에서 조건이 제대로 작동하지 않는 경우

  19. 19

    이미지 Xcode가있는 버튼에서 제약 조건이 작동하지 않습니다.

  20. 20

    입력 필드가있는 동안 캔버스에서 tkinter 확인란이 작동하지 않습니다.

  21. 21

    SVG <use> 요소에서 너비와 높이가 작동하지 않습니다.

  22. 22

    steps () 함수가있는 CSS 이미지 스프라이트 애니메이션이 내 이미지에서 작동하지 않습니다.

  23. 23

    CSS : 이미지 너비와 높이가 CSS에 설정되어 있어도 동일하게 나타나지 않습니다.

  24. 24

    Firefox에서 CSS 스프라이트가 제대로 작동하지 않음

  25. 25

    선호하는 백 버퍼 높이 및 너비 교차가 제대로 작동하지 않음

  26. 26

    너비와 높이가 작동하지 않는 것 같습니다.

  27. 27

    CSS 이미지 호버 효과가 예상대로 작동하지 않습니다.

  28. 28

    jquery DataTable 서버 측 추가 행이 제대로 작동하지 않습니다.

  29. 29

    캔버스가 로컬에서 작동하지 않고 TRYIT에서 작동하는 이유

뜨겁다태그

보관