imagegd lib で非常に奇妙な問題が発生しています。
次の方法を検討してください。
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]
ゼロより大きい場合は黒のピクセルを配置し、そうでない場合は何もしません (明るい灰色のまま)
いくつかのデバッグ テストを実行しました。結果は次のとおりです。
http://pastebin.com/8DgytNzN - 代わりに、画像はすべて黒にする必要があります - 私はこれを取得しています
私は何かが恋しいですか?そこで何が起こっているのですか?
これは私がメソッドをテストする方法です:
$image = $layer->getMatrixImage() ;
$fpath = "download/tmp/" . uniqid() . ".jpg";
imagejpeg($image, $fpath);
imagedestroy($image);
echo '<img src="'.$fpath.'" /><br/>';