1

以下のように、すべての行に座標 x1、y1、x2、y2 を持つファイル A2.txt があります。

204 13 225 59  
225 59 226 84  
226 84 219 111  
219 111 244 192  
244 192 236 209   
236 209 254 223  
254 223 276 258 
276 258 237 337  

私のphpファイルには、そのコードがあります。このコードは、すべての行を取得し、行からの座標で線を描画する必要があります。しかし、何かが間違っていたので、何も描画されませんでした:/:

<?php
$plik = fopen("A2.txt", 'r') or die("blad otarcia");
while(!feof($plik))
{
   $l = fgets($plik,20);
   $k = explode(' ',$l);

   imageline ( $mapa , $k[0] , $k[1] , $k[2] , $k[3] , $kolor );
}
imagejpeg($mapa);
imagedestroy($mapa);
fclose($plik) ;
?>

imagejpeg と imagedestroy を使用すると、最初の線だけが描画されます。すべての線を引くにはどうすればよいですか?? 助けてください :)

4

1 に答える 1

6

構造化されておらず、クリーンアップもエラー チェックも行われていない例:

<?php
$plik = <<<EOD
204 13 225 59  
225 59 226 84  
226 84 219 111  
219 111 244 192  
244 192 236 209   
236 209 254 223  
254 223 276 258 
276 258 237 337  
EOD;

$plik = preg_replace('/\r\n?/', "\n", $plik);

$arr = explode("\n", $plik);
array_walk($arr,
    function (&$value, $key) {
        $value = explode(' ', $value);
    }
);

$minwidth = array_reduce($arr,
    function ($res, $val) { return min($res, $val[0], $val[2]); },
    PHP_INT_MAX);
$maxwidth = array_reduce($arr,
    function ($res, $val) { return max($res, $val[0], $val[2]); },
    (PHP_INT_MAX * -1) - 1);
$minheight = array_reduce($arr,
    function ($res, $val) { return min($res, $val[1], $val[3]); },
    PHP_INT_MAX);
$maxheight = array_reduce($arr,
    function ($res, $val) { return max($res, $val[1], $val[3]); },
    (PHP_INT_MAX * -1) - 1);


/* note: The image does not reflect the "+ 1"'s I added in a subsequent edit */
$mapa = imagecreatetruecolor($maxwidth - $minwidth + 1, $maxheight - $minheight + 1);
$kolor = imagecolorallocate($mapa, 100, 200, 50);

foreach ($arr as $k) {
    imageline($mapa,
        $k[0] - $minwidth,
        $k[1] - $minheight,
        $k[2] - $minwidth,
        $k[3] - $minheight, $kolor );
}
header("Content-type: image/png");
imagepng($mapa);

結果:

スクリプトの結果

于 2010-06-05T02:43:20.553 に答える