0

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/>';
4

1 に答える 1

0

@Jonが推奨したように、私は取りました

imagecolorallocate($img, 0,0,0)

私のループの外にあり、すべてがうまく機能します

于 2013-09-04T08:03:45.523 に答える