2011-11-23 2 views
1

검은 픽셀이 true이고 흰색 픽셀이 false 인 2 차원 배열에 전체 이미지 (PNG)를로드하고 싶습니다.PHP 이미지를 배열로 2 비트로로드하십시오.

가장 효율적인 방법은 무엇입니까?

이미지를 비트 맵으로 변환하고이를 읽으려고합니까, 아니면보다 효율적인 방법이 있습니까?

+0

검은 색이나 흰색이 아니라면 어떻게 될까요? – zaf

+0

항상 검은 색이나 흰색, 2 비트 비트 맵입니다. – Alasdair

+0

참고 : 각 픽셀에 1 비트의 정보 (흑백 또는 흰색) 만 있으면되므로 흑백 비트 맵은 * 1 비트 *입니다. – diracdeltafunk

답변

3

이 수행해야합니다

$image = imagecreatefrompng("input.png"); 
$width = imagesx($image); 
$height = imagesy($image); 
$colors = array(); 

for ($y = 0; $y < $height; $y++) 
{ 
    for ($x = 0; $x < $width; $x++) 
    { 
     $rgb = imagecolorat($image, $x, $y); 
     $r = ($rgb >> 16) & 0xFF; 
     $g = ($rgb >> 8) & 0xFF; 
     $b = $rgb & 0xFF; 

     $black = ($r == 0 && $g == 0 && $b == 0); 
     $colors[$x][$y] = $black; 
    } 
} 

아마 더 효율적인 방법은 Imagick::exportImagePixels()을 사용하는 것입니다.

+0

'imagecolorat()'에 대해 알고 있고, 좀 더 효율적인 것을 찾고 있습니다. 그러나 당신의 대답에 감사드립니다. – Alasdair

+0

@Alasdair 귀하는 귀하의 질문에 언급하지 않았습니다. ImageMagick을 가지고 있다면, ['exportImagePixels()'] (http://www.php.net/manual/en/imagick.exportimagepixels.php)를보고 그 배열을 반복 할 수 있습니다. – CodeCaster

+0

죄송합니다. 더 자세히 설명해야합니다. 내가 이것을하고 싶은 모든 이유는 GD를 우회하는 것입니다. – Alasdair