2017-10-23 20 views
1

캔버스를 사용하여 이미지 만 표시하지만 캔버스가 변경되지 않은 경우에도 toDataURL() 값은 원시 데이터와 다릅니다. 타격으로 코드 :HTML5 canvas toDataURL 원시 데이터가 변경되었습니다.

<html> 
<head> 
    <title>For test</title> 
    <script type="text/javascript"> 

     window.onload = function() { 
      var c = document.getElementById("myCanvas"); 
      var ctx = c.getContext("2d"); 
      var img = document.getElementById("scream"); 
      img.crossOrigin = 'Anonymous'; 
      ctx.drawImage(img, 0, 0); 

      console.log(c.toDataURL().length); 
      console.log("data:img/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAADUAAAAzCAIAAAC43dc6AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABPSURBVGhD7dOhAQAgDMAw/n96GCyqZiK5oKZndtPX6Gv0NfoafY2+Rl+jr9HXrO8D/t4nW+lr9DX6Gn2NvkZfo6/R1+hr9DX6Gn3N7r6ZCxmTdxPs4RLCAAAAAElFTkSuQmCC".length); 

     } 

    </script> 
</head> 
<body> 

<p>Image to use:</p> 
<img id="scream" src="data:img/jpg;base64,iVBORw0KGgoAAAANSUhEUgAAADUAAAAzCAIAAAC43dc6AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABPSURBVGhD7dOhAQAgDMAw/n96GCyqZiK5oKZndtPX6Gv0NfoafY2+Rl+jr9HXrO8D/t4nW+lr9DX6Gn2NvkZfo6/R1+hr9DX6Gn3N7r6ZCxmTdxPs4RLCAAAAAElFTkSuQmCC" /><p> 
<p>Canvas:</p> 
<canvas id="myCanvas" width="53" height="51"></canvas> 
</body> 

답변

0

간단한 : 당신이 다시 적용하는 손실 과정이다 JPEG 압축을. 원본 이미지가 같은 컴퓨터에서 나온 것이 아니라면 정확하게 일치시킬 수는 없습니다. 동일한 algo를 사용한 경우에도 재 인코딩 일치를 얻으려면 품질 요소를 일치시켜야합니다. 코드에서 지정되는 품질이 보이지 않습니다 (argument to toDataURL()).

동일한 설정을 사용 했더라도이 엔코더에는 약간의 부두가 있으며 장치 해상도 변경, 확대/축소, 글꼴 업데이트 또는 CPU가 다운되면 (잠재적으로) 출력에 영향을 미칠 수 있습니다. 캔버스 레이아웃의 동적 특성. 포토샵과 같은 앱은 브라우저보다 훨씬 반복적입니다.