Скорость создания PNG в PHP средствами GD
Меня сейчас очень интересует, стоит ли работать с изображениями в PHP. Сомнения вызывает не возможности работы с библиотекой GD, а скорость создания PNG-изображений.
Для этого я создал небольшой PHP-скрипт, который генерирует случайный массив чисел с координатами для шестиугольника. А этот шестиугольник рисуется на изображении размером 250×250 px, которое сохраняется в файл. Скрипт работает в течение 10 секунд. Несколько раз запуская этот скрипт, который генерирует сотни изображений, я могу получить среднюю производительность (изображений в секунду).
Сам скрипт:
// current time $time = time(); // create dir mkdir ('test/' . $time, 0777); // min and max values $min = 0; $max = 250; // i $i = 0; while (time() < $time + 10) { // set up array of points for polygon $values = array( rand($min,$max), rand($min,$max), // Point 1 (x, y) rand($min,$max), rand($min,$max), // Point 2 (x, y) rand($min,$max), rand($min,$max), // Point 3 (x, y) rand($min,$max), rand($min,$max), // Point 4 (x, y) rand($min,$max), rand($min,$max), // Point 5 (x, y) rand($min,$max), rand($min,$max) // Point 6 (x, y) ); // create image $image = imagecreatetruecolor(250, 250); // some colors $bg = imagecolorallocate($image, 200, 200, 200); $blue = imagecolorallocate($image, 0, 0, 255); // draw a polygon imagefilledpolygon($image, $values, 6, $blue); // save image imagepng($image, 'test/' . $time . '/' . $i . '.png'); imagedestroy($image); $i++; }
Изображения получаются примерно такими:
Итак, результаты:
- 48 изображений в секунду на моём ноутбуке
- 70 изображений в секунду на виртуальном хостинге
Результаты вполне нормальные :-)
Коммент.(13)
Интересно, а как скорость рисования будет зависеть от числа шестиугольников на одном рисунке (или вообще вершин, если рисовать различные многоугольники)?
При увеличении количества вершин:
— 12 вершин — скорость упала на 5%,
— 18 вершин — скорость упала на 10%,
— 80 вершин — скорость упала на 30%,
— 240 вершин — скорость упала на 60%.
При увеличении количества многоугольников:
— 20 фигур — на 45%,
— 50 фигур — на 70%,
— 250 фигур — на 89%.
Что думаешь?
Кстати, использование всяких приёмов для сглаживания не сильно сказывается на производительности.
Я так понял, что при рисовании 250 6-угольников скорость упала на 89%, т.е рисовалось примерно 8 картинок в секунду на виртуальном хостинге. Вроде бы не плохо. А что если увеличить размер изображения? Например взять 600x400px? Сглаживание не сказывается на производительности — видимо оно применяется 1 раз ко всему изображению, а не отдельно к каждому многоугольнику. В целом, думаю результаты хорошие.
Да, примерно такая скорость. Это на ноутбуке. На виртуальном хостинге результаты лучше на 30%. И даже выше :)
Надо попробовать с другими библиотеками — не только GD есть.
Нашёл интересное сравнение библиотек. Если есть время, то попробуй реализовать подобное с использованием ImageMagik.
Кстати, стандартный tile 256×256. Зачем больше? :)
1. А какие параметры ноутбука? Процессор, память, тип HDD, ОС?
2. Что будет, если в 5 и 36 строке путь указать абсолютный? На хостинге и на ноуте отдельно?
3. Что будет, если по скрипт закодировать Zend, например, и выполнять под Zend Optimizer?
жесть какая-то, а не код:
mkdir ('test/' . $time, 0777);
говночитабельность и минимальные прибавки скорости выполнения.
# mkdir «test/$time», 0777;
$min = 0;
$max = 250;
// i
$i = 0;
# lol xD
($min, $max, $i) = (0, 250, 0);
м?
imagepng ($image, 'test/' . $time . '/' . $i . '.png');
# жесть какая-то. какие прибавки в скорости вы хотите получить от такого скрипта, тем более от GD)...
# imagepng ($image, «test/$time/$i.png»);
# пиши на пейтоне или пёрле)
Пишу и на пайтоне. Писал на перле. А этот код всего лишь был приведён в качестве примера чего-то там :) он свою функцию выполнил.
>> он свою функцию выполнил.
важно каким образом он свои функции там выполнил.
Пофигу как работает, главное что работает? XDD
Нет, конечно :) он показал, что возможно создание тайлов на сервере.
Это было год назад O_o сейчас я бы написал по-другому, конечно.
Может я чего-то недопонимаю, но собственно в чём проблема создания png изображения на сервере (д-м w2003 (адм.учётка) ну или никсовый сервак)?
# от GD вообще не ожидают дикой производительности, как и многопоточности от пхп)