- PVSM.RU - https://www.pvsm.ru -
В духе самого фреймворка экспериментировать будем на фее которая справа ( взята с девиантарта http://j-scott-campbell.deviantart.com/ [2] ). Если кому-то покажется что в ней слишком много иннуендо, то посмею напомнить что уже больше 20 лет стандартным рисунком тестирования графических алгоритмов является Lenna [3] из плейбоя.
Сейчас следует короткое описание тестов и выходные рисунки. В конце статьи будет сам бенчмарк скорости работы одной таблицей.
Итак сначала попробуем уменьшить ее до 100 пикселей по ширине.
$pixie->image->read($dir.'fairy.jpg')
->resize(200)
->save($dir.'resize.jpg');
Разницы особой на первый взгляд незаметно, но например ее глаз на GD версии не имеет того ярко выраженного зеленого цвета как у Imagick и Gmagick.
Чтобы сделать автарку квадратной ее нужно сначала масштабировать по меньшей стороне а затем обрезать по большей. На PHPixie это делается довольно просто:
$pixie->image->read($dir.'fairy.jpg')
->resize(200, 200, false)
->crop(200, 200)
->save($dir.'crop.jpg');
Очевидно что выглядеть они будут идентически предидущим.
Теперь попробуем создать белый рисунок и написать текст фиолетовым цветом используя TTF шрифт.
$pixie->image->create(300, 70, 0xffffff, 1)
->text("Hello World", 50, $dir.'/Sofia-Regular.ttf', 10, 50, 0x5B43AA)
->save($dir.'text.jpg');
Тут результаты немного подраматичней. GD почему-то сделала цвет текста темней и гораздо хуже сработал антиалиасинг, в результате чего края текста немного размыты. У обеих Magick-ов текст получился гораздо лучше.
Текст на строки разбивает сама PHPixie, но для этого она использует информацию о метрике текста от графической библиотеки. Так как приходится считать размер каждого слова это может быть довольно дорогим процессом. Итак попробуем поместить на пустую страницу кусочек песенки.
$text = "When I closed my eyes to the shimmering light ".
"all memory faded and I could see ".
"that a mushroom circle of red and white ".
"and myriad fairies surrounded me. ";
$pixie->image->create(300, 180, 0xffffff, 1)
->text($text, 20, $dir.'/Sofia-Regular.ttf', 10, 50, 0x5B43AA, 1, 300)
->save($dir.'wrap.jpg');
На меньшем шрифте недостатки не так заметны но если присмотреться к изгибам то довольно легко можно отличить. Но надо заметить что Imagick потратил намного больше времени, прежде всего из за пересчитывания метрики шрифта на каждом слове (ведь приходится наново считывать шрифт с диска каждый раз) в то время как GD и Gmagick были намного быстрее.
Этот тест наиболее оторван от реальности, но хотелось побенчить скорость наложения рисунков и вообще операции посложнее. Итак мы создаем пустой рисунок, с одной стороны ставим автарку феи а с другой ту же аватарку только обернутую по горизонтали и вертикали да еще и развернутую боком.
$canvas = $pixie->image->create(400, 200);
$fairy = $pixie->image->read($dir.'fairy.jpg')
->resize(200, 200, false)
->crop(200, 200);
$canvas ->overlay($fairy, 0, 0)
->overlay($fairy->flip(true, true)->rotate(90), 200, 0)
->save($dir.'overlay.jpg');
А вот и сам бенчмарк. По горизонтали слева-направо проведенные тесты, по вертикали среднее время исполнения ( каждый тест прогонялся 100 раз).
Вывод, лучше всего таки использовать Gmagick, если его нет то Imagick. Над GD можно задуматься только в случае если надо будет писать много текста и то не очень замысловатым шрифтом.
Кстати отдельно замечу насколько сильно мне понравился интерфейс самой PHPixie в этом плане, в особенности наличие функций для множества стандартных действий (тот же самый враппинг текста) для которых раньше приходилось качать отдельные классы.
Автор: jigpuzzled
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/php-2/40004
Ссылки в тексте:
[1] графический модуль для PHPixie: http://phpixie.com/modules/image-module/
[2] http://j-scott-campbell.deviantart.com/: http://j-scott-campbell.deviantart.com/
[3] Lenna: https://en.wikipedia.org/wiki/Lenna
[4] Источник: http://habrahabr.ru/post/188666/
Нажмите здесь для печати.