Fexclub.su Технологии Программирование и исходники Веб-программирование

imagepolygon(): You must have at least 3 points in your array

Страница 1 из 2 1  2 
kadr 11.02.2012, 18:59
Привет всем, подскажите как с этим бороться imagepolygon(): You must have at least 3 points in your array, я вообще не пойму как так может быть.

         imagepolygon($im, $poly, count($poly)/2, $colorArr[\"black\"]);
         imagefilledpolygon($im, $poly, count($poly)/2, $colorArr[$color]); 

Притом в массиве $poly содержитсяArray
(
[0] => 164
[1] => 195
[2] => 164
[3] => 187
[4] => 167
[5] => 187
[6] => 162
[7] => 179
[8] => 158
[9] => 187
[10] => 160
[11] => 187
[12] => 160
[13] => 195
[14] => 164
[15] => 195
[16] => 164
[17] => 195
)
Array
(
[0] => 185
[1] => 229
[2] => 185
[3] => 222
[4] => 188
[5] => 222
[6] => 183
[7] => 213
[8] => 178
[9] => 222
[10] => 181
[11] => 222
[12] => 181
[13] => 229
[14] => 185
[15] => 229
[16] => 185
[17] => 229
)
и тд. там еще много.Помогите разобраться!
_flea 12.02.2012, 09:34
версия PHP какая?
kadr 12.02.2012, 15:58
php ver. 5.3.3
самое удивительное, что когда пишешь вот так

imagepolygon($im,array
(
164,
195,
164,
187,
167,
187,
162,
179,
158,
187,
160,
187,
160,
195,
164,
195,
164,
195
), 9, $colorArr[\"black\"]); 

то все нормально отрабатывает, я не пойму что ему надо.
vdv73rus 12.02.2012, 16:22
Может запятых?
_flea 12.02.2012, 16:23

Сообщение от kadr:

Притом в массиве $poly содержитсяArray
(
[0] => 164
[1] => 195
[2] => 164
[3] => 187
[4] => 167
[5] => 187
[6] => 162
[7] => 179
[8] => 158
[9] => 187
[10] => 160
[11] => 187
[12] => 160
[13] => 195
[14] => 164
[15] => 195
[16] => 164
[17] => 195
)
Array
(
[0] => 185
[1] => 229
[2] => 185
[3] => 222
[4] => 188
[5] => 222
[6] => 183
[7] => 213
[8] => 178
[9] => 222
[10] => 181
[11] => 222
[12] => 181
[13] => 229
[14] => 185
[15] => 229
[16] => 185
[17] => 229
)
и тд. там еще много.

не сразу увидел, проглядел. У тя вложенный массив,

т.е.
$poly[0] вернет не число, а массив. Трассируй входные данные на тип, смотри что отправляешь.
kadr 12.02.2012, 19:22
завтра выложу весь код, так будет понятнее.
Массив не вложенный, проверял так:

print_r($poly) и print_r(array
(
164,
195,
164,
187,
167,
187,
162,
179,
158,
187,
160,
187,
160,
195,
164,
195,
164,
195
)); 

возвращают одно и тоже, вообще различий нет.
EarL 12.02.2012, 20:17
всё работает пробовал так

<?php

$im = imagecreatetruecolor(800, 800)
      or die(\"Cannot Initialize new GD image stream\");

$background_color = imagecolorallocate($im, 0, 0, 0);

$color = imagecolorallocate($im, 255, 255, 255);

$poly = array(
    164,
    195,
    164,
    187,
    167,
    187,
    162,
    179,
    158,
    187,
    160,
    187,
    160,
    195,
    164,
    195,
    164,
    195);

imagepolygon($im, $poly, count($poly) / 2, $color);

header(\"Content-type: image/png\");
imagepng($im);

kadr 13.02.2012, 03:59
вот код:

 foreach ($raionArr as $raion)
    {
        $d = file(dirname(__FILE__) . '/images/' . $raion['file']);
     

        $color = 7;
        if (isset($raion['color']))
            $color = $raion['color'];


       
        if (count($d) == 1)
            $d = trim(explode(\"\r\", $d[0]));

        
        
        $poly = array();
        for ($i = 0; $i < count($d); $i++)
            if (preg_match(\"/([0-9.]+)\s([0-9.]+)\s[Llm]/\",$d[$i],$matches))
            {
                $poly[] = trim($matches[1]);
                $poly[] = trim($matches[2]);                
            }
    
    
        for ($i = 0; $i < count($poly); $i+=2)
        {
            
            $poly[$i]/=$maxw;
            $poly[$i + 1]/=$maxh;

            
            $poly[$i]*=($W - 10);
            $poly[$i + 1]*=($H - 10);

            
            $poly[$i + 1] = $H - $poly[$i + 1];
        }


        
      
       //  die();       
         imagepolygon($im, $poly, count($poly)/2, $colorArr[\"black\"]);
         imagefilledpolygon($im, $poly, count($poly)/2, $colorArr[$color]);
        
    } 

kadr 13.02.2012, 04:02

Сообщение от mrFlea:

не сразу увидел, проглядел. У тя вложенный массив,

т.е.
$poly[0] вернет не число, а массив. Трассируй входные данные на тип, смотри что отправляешь.

По поводу вложенности массива

echo $poly[0] 

выдает результат одно число, первое 164.9******4.
EarL 13.02.2012, 07:12

Сообщение от kadr:

вот код:
 foreach ($raionArr as $raion)
    {
        $d = file(dirname(__FILE__) . '/images/' . $raion['file']);
     

        $color = 7;
        if (isset($raion['color']))
            $color = $raion['color'];


       
        if (count($d) == 1)
            $d = trim(explode(\"\r\", $d[0]));

        
        
        $poly = array();
        for ($i = 0; $i < count($d); $i++)
            if (preg_match(\"/([0-9.]+)\s([0-9.]+)\s[Llm]/\",$d[$i],$matches))
            {
                $poly[] = trim($matches[1]);
                $poly[] = trim($matches[2]);                
            }
    
    
        for ($i = 0; $i < count($poly); $i+=2)
        {
            
            $poly[$i]/=$maxw;
            $poly[$i + 1]/=$maxh;

            
            $poly[$i]*=($W - 10);
            $poly[$i + 1]*=($H - 10);

            
            $poly[$i + 1] = $H - $poly[$i + 1];
        }


        
      
       //  die();       
         imagepolygon($im, $poly, count($poly)/2, $colorArr[\"black\"]);
         imagefilledpolygon($im, $poly, count($poly)/2, $colorArr[$color]);
        
    } 




нифига не понятно а че в файле район? экстасексы в отпуске, я скинул пример он у вас работает? пост номер 7 который..
пс и да что ваша регулярка делает? подзабыл я их

псс и да отвардампте всё что выходит из циклов for и посмотрите что они там плетут
_flea 13.02.2012, 08:21
Вообщем, что у меня получилось:

код(твою часть не менял, добавил инициализацию и вывод):

<?
 header (\"Content-type: image/png\");  
 $W = 400;
 $H = 400;
 $maxw = 410;
 $maxh = 410;
 $im = @imagecreate ($W, $H)
    or die (\"imagecreate, бяда бяда((\");  

 $colorArr = array(    imagecolorallocate ($im, 255, 0, 0),
            imagecolorallocate ($im, 0, 255, 0),
            imagecolorallocate ($im, 0, 0, 255),
            imagecolorallocate ($im, 255, 0, 255),
            'black'=> imagecolorallocate ($im, 0, 0, 0)
            );
 $raionArr = array(    array ( 'color'=> '3', 'file'=>'1.txt'),
            array ( 'color'=> 2, 'file'=>'2.txt'),
            array ( 'color'=> 1, 'file'=>'3.txt'),
            array ( 'color'=> 0, 'file'=>'4.txt')
            );

 foreach ($raionArr as $raion) 
    { 
        $d = file(dirname(__FILE__) . '/images/' . $raion['file']); 
      

        $color = 0; 
        if (isset($raion['color'])) 
            $color = $raion['color']; 


        
        if (count($d) == 1) 
            $d = trim(explode(\"\r\", $d[0])); 

         
         
        $poly = array(); 
        for ($i = 0; $i < count($d); $i++) 
            if (preg_match(\"/([0-9.]+)\s([0-9.]+)\s[Llm]/\",$d[$i],$matches)) 
            { 
                $poly[] = trim($matches[1]); 
                $poly[] = trim($matches[2]);                 
            } 
     
     
        for ($i = 0; $i < count($poly); $i+=2) 
        { 
             
            $poly[$i]/=$maxw; 
            $poly[$i + 1]/=$maxh; 

             
            $poly[$i]*=($W - 10); 
            $poly[$i + 1]*=($H - 10); 

             
            $poly[$i + 1] = $H - $poly[$i + 1]; 
        } 


         
       
       //  die();        
         imagepolygon($im, $poly, count($poly)/2, $colorArr['black']);   // я бы поменял местами imagefilledpolygon и imagepolygon
         imagefilledpolygon($im, $poly, count($poly)/2, $colorArr[$color]); 
         
    } 
 imagepng ($im);  


?>

содержимое файлов примерно такое:

123.9 123.678 Llm
342.8 43.678 Llm
254.76 35.678 Llm
64.76 345.678 Llm
184.76 245.678 Llm
354.76 345.678 Llm

все норм, никто не ругается, смотри в чем разница
kadr 13.02.2012, 10:34
Содержимое файла примерно такое
287.9******8.7082 m
287.9******1.9157 L
280.9******1.9157 L
292.5******2.1265 L
304.1******1.9157 L
297.2******1.9157 L
297.2******8.7082 L
287.9******8.7082 L
287.9******8.7082 L
kadr 13.02.2012, 10:37

Сообщение от EarL:

нифига не понятно а че в файле район? экстасексы в отпуске, я скинул пример он у вас работает? пост номер 7 который..
пс и да что ваша регулярка делает? подзабыл я их

псс и да отвардампте всё что выходит из циклов for и посмотрите что они там плетут

preg_match("/([0-9.]+)\s([0-9.]+)\s[Llm]/",$d[$i],$matches)
Находит в файле пробел и числа с обоих сторон запоминает в $matches, но это очень грубо, но суть такая.
kadr 13.02.2012, 10:46

Сообщение от EarL:

всё работает пробовал так
<?php

$im = imagecreatetruecolor(800, 800)
      or die(\"Cannot Initialize new GD image stream\");

$background_color = imagecolorallocate($im, 0, 0, 0);

$color = imagecolorallocate($im, 255, 255, 255);

$poly = array(
    164,
    195,
    164,
    187,
    167,
    187,
    162,
    179,
    158,
    187,
    160,
    187,
    160,
    195,
    164,
    195,
    164,
    195);

imagepolygon($im, $poly, count($poly) / 2, $color);

header(\"Content-type: image/png\");
imagepng($im);




Так то работает!
Вот вывод после первого цикла:

        echo \"<pre>\";    
        print_r($poly);
        echo \"</pre>\";
Array
(
    [0] => 383
    [1] => 410
    [2] => 383
    [3] => 427
    [4] => 390
    [5] => 427
    [6] => 378
    [7] => 447
    [8] => 367
    [9] => 427
    [10] => 374
    [11] => 427
    [12] => 374
    [13] => 410
    [14] => 383
    [15] => 410
    [16] => 383
    [17] => 410
)
и тд. 

Вот тоже самое после второго цикла:

Array
(
    [0] => 164.7******8
    [1] => 195.7******5
    [2] => 164.7******8
    [3] => 188.2******6
    [4] => 167.7******3
    [5] => 188.2******6
    [6] => 162.5******6
    [7] => 179.5******2
    [8] => 157.8******1
    [9] => 188.2******6
    [10] => 160.8******7
    [11] => 188.2******6
    [12] => 160.8******7
    [13] => 195.7******5
    [14] => 164.7******8
    [15] => 195.7******5
    [16] => 164.7******8
    [17] => 195.7******5

Раньше все работало, после того как сервак умер, восстановил на другом серваке, поднимал его с самого начала, то есть на чистую машину ставил все с нуля, ОС: CentOS 6.2. И вот теперь такая херня.
kadr 13.02.2012, 10:50
Вот скрин ошибки!
Страница 1 из 2 1  2 
Похожие темы
APB (All Points Bulletin)
APB (All Points Bulletin)
All Points Bulletin
All Points Bulletin