Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Бенчмарк графических библиотек для PHP

Anna | 31.05.2014 | нет комментариев

В плане тот, что мы теперь разрабатываем много работы с фотографиями, в итоге чего скорость графической библиотеки является реально основным фактором при оптимизации сайта. Не секрет что ImageMagick давным-давно стал эталоном разработки на PHP, правда теснее некоторое время его оттуда сталкивает форк под наименованием GraphicsMagick. Мне стало увлекательно насколько крепко они отличаются и сколько форы могут дать ветхому добродушному GD. К счастью как раз незадолго вышелграфический модуль для PHPixie тот, что поддерживает все три библиотеки, что и дозволило мне провести довольно увлекательные тесты.

В духе самого фреймворка экспериментировать будем на фее которая справа ( взята с девиантарта http://j-scott-campbell.deviantart.com/ ). Если кому-то покажется что в ней слишком много иннуендо, то посмею напомнить что теснее огромнее 20 лет стандартным рисунком тестирования графических алгорифмов является Lenna из плейбоя.

Теперь следует короткое изложение тестов и выходные рисунки. В конце статьи будет сам бенчмарк скорости работы одной таблицей.

Примитивное масштабирование

Выходит вначале испробуем уменьшить ее до 100 пикселей по ширине.

$pixie->image->read($dir.'fairy.jpg')
			->resize(200)
			->save($dir.'resize.jpg');

image

Разницы специальной на 1-й взор неприметно, но скажем ее глаз на GD версии не имеет того ясно выраженного зеленого цвета как у Imagick и Gmagick.

Создание квадратной аватарки

Дабы сделать автарку квадратной ее необходимо вначале масштабировать по меньшей стороне а после этого обрезать по большей. На PHPixie это делается достаточно легко:

$pixie->image->read($dir.'fairy.jpg')
			->resize(200, 200, false)
			->crop(200, 200)
			->save($dir.'crop.jpg');

image
Видимо что выглядеть они будут идентически предидущим.

Написание текста и создание пустого изображения

Сейчас испробуем сделать белый рисунок и написать текст фиолетовым цветом применяя TTF шрифт.

$pixie->image->create(300, 70, 0xffffff, 1)
			->text("Hello World", 50, $dir.'/Sofia-Regular.ttf', 10, 50, 0x5B43AA)
			->save($dir.'text.jpg');

image

Здесь итоги немножко подраматичней. 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');

image

На меньшем шрифте недочеты не так невидимы но если присмотреться к изгибам то достаточно легко дозволено отличить. Но нужно подметить что 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');

image

Скорость работы

А вот и сам бенчмарк. По горизонтали слева-направо проведенные тесты, по вертикали среднее время исполнения ( всякий тест прогонялся 100 раз).

image

Итог, отменнее каждого таки применять Gmagick, если его нет то Imagick. Над GD дозволено задуматься только в случае если нужно будет писать много текста и то не дюже замысловатым шрифтом.

Кстати отдельно подмечу насколько крепко мне понравился интерфейс самой PHPixie в этом плане, в особенности присутствие функций для множества стандартных действий (тот же самый враппинг текста) для которых прежде доводилось качать отдельные классы.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB