2013-09-03 3 views
0

imagegd lib에 아주 이상한 문제가 있습니다.이미지 세트 픽셀이 제대로 작동하지 않습니다 - gd lib가 손상 되었습니까?

방법에 따라 condifer하십시오

public function getMatrixImage() { 
    // 90 x 40 test 
    $img  = imagecreate($this->last_used_matrix_x, $this->last_used_matrix_y); 
    $background = imagecolorallocate($img, 200, 200, 200); 
    imagefill($img, $background, 0, 0); 

    echo "<pre>"; 

    for ($y = 0; $y < $this->last_used_matrix_y; $y++) { 
     for ($x = 0; $x < $this->last_used_matrix_x; $x++) { 
      $pixel = $this->matrix[$y][$x]; 

      // Debug 1 - comment/uncomment 
      // echo $pixel ? "#" : "-"; 
      if (!$pixel) { 
       continue; 
      } 

      $color = imagecolorallocate($img, 0, 0, 0); 

      if ($this->id == 1) { 
       // Debug 2 - comment/uncomment 
       echo " ({$x}.{$y}) = BLACK" . PHP_EOL; 
      } 

      // I knew it's pointless but I am already desperated 
      $x = intval($x); 
      $y = intval($y); 

      imagesetpixel($img, $x, $y, imagecolorallocate($img, 0, 0, 0)); 
     } 
     echo PHP_EOL; 
    } 
    echo "</pre>"; 

    return $img; 
} 

방법은 매우 간단합니다. 보호 된 변수 $this->matrix을 사용하여 이미지를 검정/밝은 색으로 채 웁니다. -

나 루프를 설명하게 $this->matrix[$y][$x] 검은 픽셀을 넣어 0보다 큰 경우, 그렇지 않으면 아무것도하지 않고 좀 디버그 테스트를 수행

(밝은 회색을 떠나), 여기 결과입니다 :

http://pastebin.com/8DgytNzN - 이미지 모두 검은 색이어야합니다. - 받고 있어요. this

뭔가 놓치게됩니까? 거기서 무슨 일이 일어나고있는거야?

$image = $layer->getMatrixImage() ; 
$fpath = "download/tmp/" . uniqid() . ".jpg"; 
imagejpeg($image, $fpath); 
imagedestroy($image);    

echo '<img src="'.$fpath.'" /><br/>'; 
+1

잘 작동하지만, :

내가 방법을 테스트하는 방법입니다 'imagecollorallocate '에 대한 호출은 너무 많아서 문제가 될 수있는 다른 일이 없기 때문에 의심스러워 보입니다. 매번 imagecolorallocate가 반환하는 것을 확인 했습니까? 한 번 루프 외부에서 할당을 수행하고 반환 값을 다시 사용하십시오. – Jon

+1

내 의심을 강화하십시오 : 당신의 디버그 이미지는 정확하게 127 개의 검은 색 픽셀을 가지고 있습니다. 그것은 단지 "모든"숫자가 아닙니다. – Jon

+0

@ 존 : IT입니다! 고맙습니다! – wahoo

답변

0

는 @ 존 recommended으로 내 루프 외부

imagecolorallocate($img, 0,0,0) 

을했고 모든 것이 내가 이것을 테스트하지 않았습니다

관련 문제