2017-09-28 4 views
0

캔버스에 이미지를 그리기 '데이터 URL을'의 선택해야하는 하나우리는 원래 URL 내가 <a href="https://jsfiddle.net/AndrewGong/mkx7f8un/11/" rel="nofollow noreferrer">here</a>에 코드를

나는 웹 이미지의 URL을 사용할 때 내가 언젠가 찾을
var can = document.getElementById('canvas1'); 
var ctx = can.getContext('2d'); 
ctx.fillRect(50,50,50,50); 
src="https://www.pixelstalk.net/wp-content/uploads/2016/07/3D-High-Resolution-Images-620x349.jpg" 

var image = new Image(); 
image.crossOrigin = "anonymous"; 
image.onload = function(){ 
    var imgWidth=image.width; 
    var imgHeight=image.height; 

    ctx.drawImage(image,0,0,imgWidth,imgHeight); 
} 
image.src = src 

, 그것은 공장. 그러나 때로는 웹 이미지의 '데이터 URL'을 사용해야합니다. 그렇다면 우리는 어느 것을 선택해야합니까? 원래 URL 또는 데이터 URL?

누구든지 조언을 해줄 수 있습니까?

+1

차이점은 해상도가 아니라 * origin *으로 판단됩니다. 동일한 출처 정책은 다른 출처의 이미지로 수행 할 수있는 작업을 제한합니다. "다른 도메인의 이미지 사용"(원점을 의미) [여기] (https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Using_images)을 참조하십시오. –

+1

cross origin을 cross origin으로 설정하면 'Cross-origin request'(즉, Origin : HTTP 헤더)가 수행됩니다. 그러나 어떤 신임장도 전송되지 않습니다 (즉, 쿠키가없고 X.509 인증서도없고 HTTP 기본 인증도 보내지지 않습니다). ** 서버가 원거리 사이트로 신임장을 제공하지 않으면 (Access-Control- Allow-Origin : HTTP 헤더) 이미지가 오염되어 사용이 제한됩니다. ** –

+0

하지만 URL 이미지의 '데이터 URL'을 만드는 방법은 무엇입니까? – user8627119

답변

0

외부 서버에서 이미지를 검색하기 때문입니다. 자신과 같은 서버에서 이미지를 변환하거나 이미지를 base64로 변환하십시오. 당신은 이미지가

예를 base6로 변환하기 위해 인터넷 여러 사이트에서 찾을 수 있습니다 : src="data:image/jpeg;base64,/9j/4QAYRXhpZg.......DEFF";

+0

URL 이미지의 '데이터 URL'을 만드는 방법은 무엇입니까? – user8627119

+0

예 : https://jsfiddle.net/7c16mcx0/ – Mahmoud

+0

URL 이미지의 '데이터 URL'을 만드는 방법입니다. – user8627119

0

다른 사람이 지적한대로 CORS 권한에 있습니다. 기본적으로 브라우저는 외부 서버에 호스팅 된 이미지의 내용을로드 할 수 없도록합니다 (명시 적 CORS 권한이없는 경우). CrossOrigin을 익명으로 설정하면 대부분 해결되지만 대부분의 경우에는 해결되지 않습니다.

이 문제를 해결할 수있는 유일한 방법은 이미지에 대한 cURL 요청을 서버에 다운로드하여 사용하는 것입니다.

일반적으로 cURL 요청을하고 서버의 실제 이미지를 유지하지 않으려는 경우 toDataURL()을 사용하여 캔버스에서 이미지를 내보낼 때 DataURL (base64 인코딩 이미지) 만 필요합니다. 응답을 base64로 인코딩하여 캔버스에 base64 DataURL로로드 할 수 있습니다.

관련 문제