Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 24.09.2016
Сообщений: 14
1

Php GD медленно работает

08.11.2017, 12:15. Показов 784. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дорого дня. Подскажите почему php GD очень медленно работает. С чем это связано.
Я беру картинку и цвет каждой точки загоняю массив. Потом этот массив точек хочу вывести на экран.
Но это происходит очень медленно. Примерно 15 мин.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
<?php
ini_set('max_execution_time', 1900);
class tochka{
    var $x;
    var $y;
    var $color1;
    Function Show(&$f) //f  это ссыка на холст
    {
        $R = ($this->color1 >> 0xF) & 0xFF;
        $G = ($this->color1 >> 0x8) & 0xFF;
        $B = $this->color1  & 0xFF;
        if(imagecolorstotal($f) >= 255) 
            $color2 = imageColorClosest($f, $R, $G, $B);
        else
            $color2 = imageColorAllocate($f, $R, $G, $B);
        
        // вывод точки на экран
        //imagesetpixel($f,$this->x,$this->y, $color2);
        imagesetpixel($f,$this->x,$this->y, $this->color1);
    }
    function __construct($x, $y, $col)
    {
        $this->x=$x;
        $this->y=$y;
        $this->color1=$col;
    }   
}
class Smeh{
    var $nY;
    var $kY;
    var $shag;
    function __construct($x, $y, $z, $f)//z - колличество вертикальных полос
    {
        $this->nY=$x; 
        $this->kY=$y;
        if ($f)
            $this->shag= abs($x-$y)/$z;
        else $this->shag= (abs($x-$y)/$z)*(-1);
    }   
}
 
function ChetNechet($x){//превращает число в четное. только для целых чисел
    if( $x & 1) {
        return $x-1;
    }
    else 
        return $x;
}
 
function RaschetY($mX, $mY){// матрица с лево
$mX=ChetNechet($mX);
$mY=ChetNechet($mY);
$M = array();
$nY=0;
$kY = $mY/2 ;
$perehod=0;
for ($y=0; $y<$mY; $y++){
    for ($x=0; $x<$mX; $x++){
        $M[$x][$y]=new Smeh($nY, $kY, $mX, true);
    }
    $nY +=2;
    $kY++;
    $perehod=$y;
    if ($nY>=$mY)
        break;
}
//echo "это:".$y."<br>";
$perehod++;
for ($y=$perehod; $y<=$mY; $y++){
    for ($x=0; $x<$mX; $x++){
        $M[$x][$y]= new Smeh($nY, $kY, $mX, false);
    }
    $nY +=2;
    $kY++;
    //if ($nY>$mY*2)
        //break;
}
 
 
$M3 = array();
for ($y=0; $y<=$mY; $y++){
    $p=$M[0][$y]->nY;
    for ($x=0; $x<$mX; $x++){
        $M3[$x][$y] = $p;
        $p+=$M[$x][$y]->shag;       
    }   
}
return $M3;
}
 
function RaschetYO($mX, $mY){// матрица с право
$mX=ChetNechet($mX);
$mY=ChetNechet($mY);
$M = array();
$nY=$mY/2;
$kY=0;
for ($y=0;$y<$mY/2; $y++){
    for($x=0; $x<$mX;$x++){
        $M[$x][$y]=new Smeh($nY, $kY, $mX, false);
    }
    $nY++;
    $kY+=2; 
}
for ($y=$mY/2;$y<=$mY; $y++){
    for($x=0; $x<$mX;$x++){
        $M[$x][$y]=new Smeh($nY, $kY, $mX, true);
    }
    $nY++;
    $kY+=2; 
}
$M3 = array();
for ($y=0; $y<=$mY; $y++){
    $p=$M[0][$y]->nY;
    for ($x=0; $x<$mX; $x++){
        $M3[$x][$y] = $p;
        $p+=$M[$x][$y]->shag;       
    }
}
return $M3;
}
 
$filename="rrr2.jpg"; // файл картинки
$size = getimagesize($filename);
$w1=$size[0]; //Ширина картинки
$h1=$size[1]; //Высота картинки
$image = imageCreateFromJpeg($filename);
 
$M1=array();
$M2=array();
$M2=RaschetYO($w1,$h1);
$M4=array();
$M4=RaschetY($w1,$h1);
 
 
 
for($y=0; $y<$h1; $y++){
    for($x=0; $x<$w1; $x++){
        $color=imagecolorat($image,$x,$y);
        $M[$x][$y]= new tochka($x, $M2[$x][$y], $color);
        $M[$x+$w1][$y]= new tochka($x+$w1, $M4[$x][$y], $color);
    }
}
imageDestroy($image);
$ie = imagecreatetruecolor($w1*2,$h1*2);
$col2=imagecolorallocate($ie,255,255,255); // создаем белый цвет
ImageFill($ie,1,1,$col2); 
 
 
for($y=0; $y<$h1; $y++){
    for($x=0; $x<$w1*2; $x++){
        $M[$x][$y]->show($ie);
    }
}
 
Header ("Content-type: image/jpeg");
imageJpeg($ie);
imageDestroy($ie);
 
?>
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2017, 12:15
Ответы с готовыми решениями:

Не работает PHP код. Файлы .php не обрабатываются, хотя, если занести в html, всё работает.
не могу разобраться с проблемой. установила денвер, вроде все работает, но как только начала...

PHP7 работает медленно
После перехода с 5.6 на 7.0.9 скрипт стал выполнятся раз эдак в 50! медленнее. В обоих случаях...

Очень медленно работает phpmyadmin. С чем это может быть связанно?
Очень медленно работает phpmyadmin. С чем это может быть связанно? НА картинке все данные о сервер...

Форма PHP не работает - или бомбежка от злючего PHP
Здравствуйте! Возникла следующая проблема: есть php документ, в котором есть форма обратной связи...

3
182 / 182 / 83
Регистрация: 18.02.2014
Сообщений: 867
08.11.2017, 13:22 2
Может с паметью проблемы?
Не чего страшного в коде не вижу, что бы 15 минут грузила. Ну за исключением если у вас картинка очень большая.
0
0 / 0 / 0
Регистрация: 24.09.2016
Сообщений: 14
08.11.2017, 13:24  [ТС] 3
если картинка 400Х400 то все ок. а вот если уже 600x600 то оооочень долго
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
09.11.2017, 01:29 4
Цитата Сообщение от viktorg78 Посмотреть сообщение
600x600
Цитата Сообщение от viktorg78 Посмотреть сообщение
for($y=0; $y<$h1; $y++){
* * for($x=0; $x<$w1; $x++){
* * * * $color=imagecolorat($image,$x,$y);
* * * * $M[$x][$y]= new tochka($x, $M2[$x][$y], $color);
* * * * $M[$x+$w1][$y]= new tochka($x+$w1, $M4[$x][$y], $color);
* * }
}
итого 2 * 600 * 600 = 720 000 объектов
Цитата Сообщение от viktorg78 Посмотреть сообщение
for($y=0; $y<$h1; $y++){
* * for($x=0; $x<$w1*2; $x++){
* * * * $M[$x][$y]->show($ie);
* * }
}
теперь 720 000 раз вызываются довольно медленные функции
imagecolorstotal и imageColorClosest

Добавлено через 10 минут
У меня на картинке 600x600 секунд за 5 укладывается, memory_limit только увеличил до 196M
0
09.11.2017, 01:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2017, 01:29
Помогаю со студенческими работами здесь

Интернет работает очень медленно на одном ПК, на другом работает быстрее.
Такая проблема, интернет очень плохо работает,скорость совсем маленькая (14м) подключаю другой комп...

Медленно работает ПК
При загрузке половины памяти 16 из 32 ГБ компьютер начинает заметно медленнее работать и...

Медленно работает PC
помогите пофиксить(удалить ненужное) думаю вирусы тоже есть лагает комп эта тема и другая моя...

Медленно работает 1С
Наш сервер 1С находиться в Турецком заводе, но он свзяан с нашим Российским заводом, и те и те...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru