2016-10-25 2 views
0

나는 이미지의 가장자리에서 색상을 읽으려면 PHP와 ImageMagick을 사용하고 있습니다.이미지 픽셀 좌표

$x = 1; 
$y = 1; 
$pixel = $image->getImagePixelColor($x, $y); 
$colors = $pixel->getColor(); // rgba 

하지만 좌표가 어떻게 작동하는지 잘 알지 못합니다. 그래서이 4px png를 만들었습니다.

enter image description here

1,1 대신 투명 화소 rgba(0,30,255,0)을 준다. 또한 넓은 범위의 픽셀을 선택하면 어떻게됩니까?

+0

돌아 오는 RGBA 값에 따르면 실제로 투명한 픽셀을 선택합니다. 'a'는 일반적으로 불투명도에 사용되는 알파 채널을 나타냅니다. 'a'의 값이 0이면 완전히 투명 함을 의미합니다. –

+0

@ User5842 오른쪽,하지만 왜 파란색 '0,30,255'의 rgb입니까? – 3zzy

+0

해당 픽셀을 RGBA 값으로 설정하려고하면 어떻게됩니까? RGB 값은 여전히 ​​'0,30,255'일 수 있습니다. 불투명도가 _blue 인 것을 의미합니다. –

답변

2

픽셀이 될 때 투명, 그것의 색깔은 무의미하게된다, 아직 는이다는이다는 붙들었다. 이 같은

, 우리는 랜덤 노이즈의 불투명 한 512 × 512 이미지를 만들 경우 :

convert -size 512x512 xc:gray +noise random a.png 

enter image description here

와 크기를 확인, 당신이 1 볼 수 있습니다.5메가바이트 :

[email protected] 1 mark staff 1.5M 26 Oct 09:14 a.png 

내가 지금 달리 동일한 투명 버전을 만들 경우

convert -size 512x512 xc:gray +noise random -alpha transparent b.png 

당신은 파일을 볼 수는 (1.7MB에서) 더 큰 가지고 지금 투명성 및 원본을 저장하기 때문에 무작위 데이터. 이 볼 수있는 아무것도 없기 때문에 나는 이미지를 표시하지 않습니다 - 그래서 그들은이 모두 함께 계속했다 -

[email protected] 1 mark staff 1.7M 26 Oct 09:16 b.png 

내가 이제 투명 레이어 완전히 불투명 랜덤 픽셀 다시 표시 될 수 있습니다 경우에도 이미지 했다 투명 :

convert b.png -alpha opaque c.png 

enter image description here

그러나, 나는 투명 다시와도 같이, (색깔은 무관 때문에) 이미지 배경의 색상에 그들 모두를 설정 한 픽셀을 한 경우 :

convert -size 512x512 xc:gray +noise random -alpha transparent -alpha background d.png 

[email protected] 1 mark staff 1.8K 26 Oct 09:22 d.png 

그리고 갑자기 1.5MB 파일이 1.8K에서 거의 1,000 배나 더 작아졌습니다. 왜냐하면 모든 (보이지 않는/투명 한) 색상이 단색의 단색 배경 색상이기 때문에 훨씬 더 압축되기 때문입니다.

좌표에 대한 귀하의 질문에 대한 답변입니다.

convert -size 1x1    \ 
     xc:red xc:cyan +append \ 
    \(xc:yellow xc:magenta +append \) -append a.png 

enter image description here

을 그리고 이런 식으로 덤프 : 우리는 작은 이미지를 같이 할 수

convert a.png txt: 

# ImageMagick pixel enumeration: 2,2,65535,srgb 
0,0: (65535,0,0) #FF0000 red 
1,0: (0,65535,65535) #00FFFF cyan 
0,1: (65535,65535,0) #FFFF00 yellow 
1,1: (65535,0,65535) #FF00FF magenta 

을 그리고 그 픽셀이 왼쪽 상단 모서리에서 시작 ImageMagick이 좌표를 참조하십시오.

+0

와우, 자세한 설명 주셔서 감사합니다! 알았어. – 3zzy

1

화면/화상의 화소 좌표계 :

상관 화소 시스템 원점 불리는 화면/화상의 하단 좌측의 점으로부터 시작한다. 픽셀의 매핑은 0 번째 인덱스부터 시작합니다. (즉, 그린 포인트는 (0,0) 좌표를 가짐). enter image description here


예 :

Green pixel => (0,0) 
Transparent => (1,0) 
Blue => (1,1) 
Red => (0,1) 

당신은 한 번에 각 픽셀을 선택 픽셀의 큰 숫자를 선택한 후 다른

예를 선택 좌표를 증가하지 않습니다

큰 픽셀 세트를 가져 오려면 하나의 픽셀에서 색상을 분석 한 다음 다른 픽셀을 선택하십시오. 좌표를 반복해서 제공하지 않으려면 특정 픽셀을 선택하거나 루프를 작성하여 특정 영역을 선택하는 좌표를 저장할 수 있습니다.

예 :

당신이 (1,1)로, 4 개 픽셀의 색상을 얻을 (0,0)에서 좌표의 루프 자동 증가 값을 기록 할 경우, 좌표를 제공, 선택된 픽셀의 색상을 얻을 다음 픽셀 및

또는

원하는 픽셀의 좌표를 개최 배열을 선언 색상 (당신이 원하는 때까지 반복)을 얻을 array => ([0]=> [0,0] [1]=> [0,1]....) 이것을 이해하는 가장 쉬운 방법은 기억하는 것입니다

+1

결과가 내 결과와 일치하지 않습니다. 매핑이 왼쪽 하단에서 시작 했습니까? 나는 이것을 얻는다 :'0,0 = red; 0,1 = 녹색; 1,0 = 청색; 1,1 = transparent'는 상단 왼쪽 매핑을 나타냅니다. – 3zzy

+0

예 귀하의 진술은 정확합니다! 하지만 근본적으로 저는 C, python, java, PHP로 픽셀과 컴퓨터 그래픽을 배웠습니다. 우리가 얼굴 탐지에서와 같이 큰 그림을 분석 할 때 DEFAULT에 의해 왼쪽 하단부터 계산됩니다. 이제는 왼쪽 하단 또는 왼쪽 상단을 확인해야합니다. –