<코드><?php /** imagecolorat — 픽셀의 색상 인덱스 값을 가져옵니다. int imagecolorat(리소스 $image, int $x, int $y) image로 지정된 그래픽에서 지정된 위치에 있는 픽셀의 색상 인덱스 값을 반환합니다. PHP가 GD 라이브러리 2.0 이상으로 컴파일되고 이미지가 트루컬러 이미지인 경우 이 함수는 해당 지점의 RGB 값을 정수로 반환합니다. 빨간색, 녹색, 파란색 구성요소의 값을 얻으려면 이동 및 마스킹을 사용하세요. */ //echo dechex(255);die;//ff 16진수 ff = 10진수 255 ini_set('display_errors', '켜기'); error_reporting(E_ALL | E_STRICT);//E_ALL: E_STRICT를 제외한 모든 오류 및 경고 정보 //E_STRICT: 코드의 최상의 상호 운용성과 향후 호환성을 보장하기 위해 코드 수정에 대한 PHP의 제안을 활성화합니다. $im = ImageCreateFromPng("images/4.png"); //$rgb = ImageColorAt($im, 100, 100); //교대조작 설명 https://my.oschina.net/u/435872/blog/134802, //n비트를 왼쪽으로 이동한다는 것은 데이터에 2의 n승을 곱한다는 의미입니다. n비트를 오른쪽으로 이동한다는 것은 데이터를 2의 n승으로 나눈 다음 반올림한다는 의미입니다. //print_r(decbin($rgb));//$rgb = 15326445 이진수 111010011101110011101101로 변환됨 //에코 $rgb >> 16;//233 15326445/2^16 = 233.862991333 //echo decbin($rgb >> 16);//11101001 $rgb의 이진 값을 오른쪽으로 16만큼 이동하고 초과 부분을 제거하여 //$r = ($rgb>> 16) & 0xFF; //$g = ($rgb>> 8) & 0xFF; //$b = $rgb & 0xFF; 함수 평균($img) { $w = 이미지x($img); $h = 이미지($img); $r = $g = $b = 0; for($y = 0; $y < $h; $y++) { for($x = 0; $x < $w; $x++) { //색상 표현 및 비트 연산 http://www.cnblogs.com/mengdd/p/3254292.html $rgb = imagecolorat($img, $x, $y); $r += $rgb >> $g += $rgb >>8 & 255; $b += $rgb & 255; } } $pxls = $w * $h; $r = decex(round($r / $pxls)); $g = dechex(round($g / $pxls)); $b = decex(round($b / $pxls)); if(strlen($r) < 2) { $r = 0 . } if(strlen($g) < 2) { $g = 0 $g; } if(strlen($b) < 2) { $b = 0 $b; } "#"을 반환합니다. $r . } print_r(평균($im));
이 코드
$r += $rgb >>
$g += $rgb >>8 & 255;
$b += $rgb & 255;
이해할 수 없는 점은 시프트 후에 비트 및 255 연산이 필요한 이유입니다.