PNG 이미지의 선택된 (x, y) 점이 투명한지 확인할 수있는 방법이 있습니까?이미지에서 픽셀의 x, y 좌표 색상을 얻는 방법은 무엇입니까?
답변
Jeff의 답변을 바탕으로 작성한 첫 번째 단계는 PNG의 캔버스 표현을 만드는 것입니다. 다음은 이미지와 너비 및 높이가 같고 그 위에 이미지가 그려진 오프 스크린 캔버스를 만듭니다. 사용자가 클릭이 위치를 얻을 수 event.offsetX
및 event.offsetY
을 사용하여 그 후
var img = document.getElementById('my-image');
var canvas = document.createElement('canvas');
canvas.width = img.width;
canvas.height = img.height;
canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);
. 이것은 다음 픽셀을 획득하는 데 사용될 수
var pixelData = canvas.getContext('2d').getImageData(event.offsetX, event.offsetY, 1, 1).data;
하나만 화소 잡는 때문에이 pixelData 화소의 R, G, B, 및 값을 포함하는 네 개의 엔트리 배열이다. 알파의 경우 255 미만의 문자는 투명도가 0이고 투명도가 완전히 투명 함을 나타냅니다.
다음은 jsFiddle 예제입니다. http://jsfiddle.net/thirtydot/9SEMf/869/이 모든 작업을 편리하게하기 위해 jQuery를 사용했지만 꼭 필요한 것은 아닙니다.
참고 : 나는 믿고 다른 도메인이나 (에서 이미지와 캔버스 더러운 경우이 기술을 의미 데이터 유출을 방지하기 위해 브라우저의 동일 출처 정책에 따라getImageData
폭포, 실패,하지만 일부 브라우저는이 문제를 해결 한 수) 모든 도메인의 SVG. 이렇게하면 로그인 한 사용자의 사이트가 사용자 정의 이미지 자산을 제공하고 공격자가 이미지를 읽어 정보를 얻고 싶어하는 경우를 방지 할 수 있습니다. 같은 서버에서 이미지를 제공하거나 Cross-origin resource sharing을 구현하여 문제를 해결할 수 있습니다.
붐 - 멋진 직장. 나는 이렇게 피들을 만들어야 했음에도 불구하고 너무 뚱뚱하고 게으 르다는 것을 알았습니다. 당신이 그것을 여기에서 죽였습니다 –
이것이 정확하려면 캔버스의 좌표 공간을 설정해야합니다. 즉, 이미지 크기와 일치하도록 너비와 높이를 설정해야합니다. CSS 너비와 높이는 레이아웃을 위해 최종 캔버스를 늘리는 역할 만하며 표시되지 않은 요소 인 경우에는 도움이되지 않습니다. $ ('');와 같은 것을 시도해보십시오. 아니면이 방법으로 오프 스크린 캔버스에 적용되지 않습니까? – fabspro
@fabspro : 그게 중요한 포인트입니다. 컨텍스트를 통해 이미지 데이터를 그리거나 읽으므로 폭과 높이 값은 의미가 없습니다. 캔버스가 컨텍스트가 왜곡되지 않았기 때문에 아무런 부작용이 없으며 이미지가 컨텍스트의 초기 너비/높이보다 작기 때문에 내가이 데모에 영향을 미치지 않는 이유가 있습니다. 나는 연결된 것보다 캔버스 자체에서'.width'와'.height'에 접근하는 것이 더 안전하지만 적절히 업데이트 할 것입니다. –
@pst가 위에서 말했듯이, Canvas는 이것을 수행하는 좋은 방법입니다. 좋은 예를 들어이 답변을 체크 아웃 :
특히뿐만 아니라 서비스를 제공 할 일부 코드 : 그 변환해야합니다 것 때문에
var imgd = context.getImageData(x, y, width, height);
var pix = imgd.data;
for (var i = 0, n = pix.length; i < n; i += 4) {
console.log pix[i+3]
}
이것은, 행 단위로 이동됩니다 x, y에 넣고 for 루프를 직접 체크로 변환하거나 내부를 조건부로 실행합니다.
다시 질문을 읽으면 그 사람이 클릭하는 지점을 얻을 수 있기를 원합니다. 이 작업은 jquery의 click 이벤트를 통해 매우 쉽게 수행 할 수 있습니다. 그냥 같은 클릭 핸들러 내부에 위의 코드를 실행
$('el').click(function(e){
console.log(e.clientX, e.clientY)
}
그
이 x와 y 값을 잡아해야합니다.이전 두 답변은 Canvas 및 ImageData 사용 방법을 보여줍니다. 실행 가능한 예제와 이미지 처리 프레임 워크를 사용하여 대답을 제안하고자하므로 수동으로 픽셀 데이터를 처리 할 필요가 없습니다.
은 x, y 좌표의 픽셀 투명도 값을 단순히 반환하는 image.getAlphaComponent (x, y) 메서드를 제공합니다. 이 값이 0이면 픽셀은 완전히 투명하고 1과 254 사이의 값은 투명도 수준입니다. 마지막으로 255는 불투명합니다.투명한 배경 좌표 (0,0)와 (150,150)두 픽셀 I는 (최대 300x300) 아래의 화상을 사용한 증명 용
.
콘솔 출력 :
(0,0) : 투명
(150150) : NOT_TRANSPARENT
var canvas = document.getElementById("canvas");
image = new MarvinImage();
image.load("https://i.imgur.com/eLZVbQG.png", imageLoaded);
function imageLoaded(){
console.log("(0,0): "+(image.getAlphaComponent(0,0) > 0 ? "NOT_TRANSPARENT" : "TRANSPARENT"));
console.log("(150,150): "+(image.getAlphaComponent(150,150) > 0 ? "NOT_TRANSPARENT" : "TRANSPARENT"));
}
<script src="https://www.marvinj.org/releases/marvinj-0.7.js"></script>
<canvas id="canvas" width="500" height="344"></canvas>
- 1. jQuery에서 x, y 픽셀의 색상을 얻으십시오
- 2. WriteableImage - 픽셀의 색상을 얻는 방법?
- 3. X 좌표, Y 좌표 변환
- 4. 나는 이미지에서 픽셀의 색상을 추출하기 위해 노력하고있어,하지만 그것은 단지 이전에로드 된 이미지에서 색상을 점점
- 5. Java X Y 좌표
- 6. 레이아웃의 이미지 x 및 y 좌표
- 7. 특정 픽셀의 x, y 위치 얻기
- 8. 커브에서 x, y 위치를 얻는 방법은 무엇입니까?
- 9. 이미지에서 지정된 색상의 x, y 위치를 찾으십니까?
- 10. 안드로이드의 이미지에서 픽셀의 rgb 값을 얻는 방법
- 11. 단일 이미지에서 색상을 클러스터하는 방법은 무엇입니까?
- 12. 안드로이드에서 캔버스에 원 drwan의 위치 (x 및 y 좌표)를 얻는 방법은 무엇입니까?
- 13. 애플릿 위치 (x, y 좌표) 화면에
- 14. JavaScript x 및 y 좌표 찾기
- 15. 이미지에서 "특정 픽셀의 색"을 파악하는 방법은 무엇입니까?
- 16. 배열 및 픽셀의 색상을 이미지에서 비교하고 배열 iOS에서 가장 가까운 색상으로 새 이미지를 만드는 방법은 무엇입니까?
- 17. 레일스에서 특정 픽셀의 색상을 선택하는 방법은 무엇입니까?
- 18. 플렉스 Datagrid - 마우스 x/y 좌표 항목을 얻는 방법?
- 19. 이미지 픽셀의 좌표를 얻는 도구
- 20. 방금 찍은 픽셀의 색상을 얻는 방법
- 21. 프로그래밍을 사용하여 각 픽셀의 좌표 찾기
- 22. (x, y) 좌표 사이의 최대 거리 찾기
- 23. 사용자 정의 UIVIew의 x, y 좌표
- 24. android 홈 화면 위젯 x-y 좌표
- 25. WPF 팝업 컨트롤 - X, Y 좌표 찾기
- 26. 경계 사각형 내 임의의 x, y 좌표
- 27. UIButton의 x 및 y 좌표 얻기
- 28. Textarea X/Y 캐럿 좌표 - jQuery 플러그인
- 29. 안드로이드 (x, y) 연속 터치 (드래그) 좌표
- 30. make_heap 및 정렬 x 및 y 좌표
이미지는 어떻게 든로드 할 수 캔버스 요소에요? –
다른 방법이 없다면 –
그것이 어떻게 수행되어야하는지입니다. –