Если вы заядлый PHP разработчик, вы, наверняка, не только наслышаны о графической библиотеке GD library. Для тех, кто с ней не знаком, поясняю GD library позволяет создавать изображения, видоизменять и управлять ими без особых усилий. Сегодня, мы познакомимся с азами использования в PHP графической библиотеки GD library.
Прежде всего
Убедитесь, что GD библиотека установлена и активирована на вашем сервере. Не знаете как это сделать? Не переживайте, все просто! Вам только нужно создать PHP файл на сервере, затем введите следующее:
<?php echo phpinfo(); ?>
Теперь откройте страницу браузера и вы увидите громадный список возможностей вашей версии PHP. Прокрутите страницу немного вниз, найдите секцию ‘GD’ и убедитесь, что библиотека подключена. Если нет, свяжитесь с компанией, предоставляющей вам услуги хостинга. К счастью, на большинстве серверов, на которых я уже успел поработать и работаю, GD библиотека установлена и подключена.
Основные моменты
Давайте пройдемся по некоторым основным моментам. Во-первых, сделаем так, чтобы все отчеты об ошибках выдавались браузером. Этого можно добиться, введя в самом начале вашего php-кода следующее:
<?php
ini_set("display_errors", "1");
error_reporting(E_ALL);
?>
Нарисуем квадрат
Давайте начнем с самого простого и нарисуем с помощью PHP синий квадрат — ничего сверхъестественного, конечно, но надо же разобраться с основами. Чтобы получить желаемый квадрат, необходимо выполнить следующие действия:
• Установить тип содержимого как «изображение», чтобы браузер смог интерпретировать изображение должным образом;
• Создать новое пустое изображение, установив нужную ширину и высоту;
• Сделать цвет фона синим;
• Сохранить окончательный вариант изображения и передать его в браузер;
• Очистить память, которая использовалась для создания и хранения изображения;
• Организовать отображение рисунка из файла index.php
Теперь, когда мы определились с порядком действий, можно начинать кодирование. Я постарался прокомментировать каждую строчку кода, а о функциях, использовавшихся в процессе кодировки, расскажу потом. Итак, вот код для создания нашего синего квадрата. После написания мы сохраним его под именем ‘basic_square.php’.
//.
нии рисунка фоновым будет именно цвет, установленный первым ()
//Обратите внимание – квадрат будет синего, а не красного цвета.
$red = imagecolorallocate($image, 255, 0, 0);
//Сохраняем файл в формате png и выводим его
imagepng($image);
//Чистим использованную память
imagedestroy($image);
?>
Теперь давайте рассмотрим все использованные функции и каждый шаг вышеприведенного кода, чтобы лучше понять, что именно мы в нем делаем:
• Как я уже пояснял, мы добавляем опцию сообщения об ошибках, чтобы в случае необходимости быстро их исправить
• Затем мы используем функцию header(), чтобы установить тип содержимого – png
• Сохраняем изображение и устанавливаем необходимую ширину и высоту – более подробно см. imagecreate()
• Затем используем функцию imagecolorallocate, чтобы выбрать синий цвет для фона нашего рисунка. Обратите внимание, что в окончательном варианте будет виден цвет, установленный в первую очередь, так что наш квадрат получится синим, а не красным.
• Для окончательного сохранения рисунка мы используем imagepng(). Если вы желаете сохранить рисунок в каком-либо каталоге, следует ввести дополнительные параметры.
• И, наконец, мы чистим память с помощью функции imagedestroy()
Мы можем посмотреть на нарисованный нами квадрат, открыв файл blue_square.php, а, еще лучше будет, если мы установить ссылку на него на главной странице:
<img src='http://themeforest.s3.amazonaws.com/65_gd/basic_square.php' alt='' />
Если все было сделано правильно, вы увидите вот такой синий квадрат:
Привет, Мир
Теперь, когда мы научились создавать изображения, давайте попробуем сделать изображение с текстом, написанным выбранным нами шрифтом. Мы можем воспользоваться любым шрифтом из каталога TrueType Font (.tff). В следующих примерах я буду использовать шрифт ‘Advent’. Давайте напишем «Hello World» на темно-сером квадрате. Внимание, смотрим на код, а затем подробно разбираем каждый шаг.
<?php
//Устанавливаем сообщения об ошибках
ini_set("display_errors", "1");
error_reporting(E_ALL);
//устанавливаем тип содержимого
header('content-type: image/png');
//Определяем размер изобра.
br /> //Сохраняем изображение
imagepng($image);
//Чистим память
imagedestroy($image);
?>
Сохраним код в файле ‘hello_world.php’и будем открывать его таким же способом, какой был указан выше. Итак, что здесь нового?
• Мы установили размер изображения 300*300 пикселей и использовали темно-серый фон
• Обратите внимание, как мы указывали путь к шрифту, используя имя шрифта: дело в том, что далее в коде нам придется накладывать текст на изображение. Кроме того, не забывайте, что имя шрифта пишется без расширения. Впрочем, это зависит от того, какую версию GD-библиотеки использует PHP: если названием шрифта не начинается с ‘/’, то потребуется расширение ttf – то есть, если перед названием файла нашего шрифта не стоит /, то в конце будет автоматически добавлено ttf.
• Затем мы пишем «Hello World!» и сохраняем текст для дальнейшего использования
• Важнейшая функция, использованная в этом коде – это imagettftext(), требующая указания 8 параметров: путь к изображению, размер изображения, угол наклона, ось x, ось y, цвет, шрифт, текст (в таком порядке)
Сохраните код, откройте его любым способом, и вы увидите вот такую картинку:

Поверните его!
Вы заметили, что у функкции imagettftext, соединяющей текст и картинку, есть параметр расположить под углом’? Значит, мы можем повернуть наш текст под любым углом. Давайте перепишем код и повернем строчку на квадрате.
<?php
//Устанавливаем сообщения об ошибках
ini_set("display_errors", "1");
error_reporting(E_ALL);
//Устанавливаем тип содержимого
header('content-type: image/png');
//Определяем размер изображения: 300x300 пикселей
$image = imagecreate(300, 300);
//Определяем цвет фона – темно-серый
$dark_grey = imagecolorallocate($image, 102, 102, 102);
$white = imagecolorallocate($image, 255, 255, 255);
//Указываем путь к шрифту
$font_path = 'advent_light';
//Пишем текст
$string = 'Hello World!';
//Соединяем текст и картинку
imagettftext($image, 50, -45, 30, 70, $white, $font_path, $string);
//Сохраняем изображение
imagepng($image);
//Чистим память
imagedestroy($image);
?>
Обратите внимание, мы установили значение -45 градусов вместо 0 градусов (как в предыдущем примере) – это все, что требуется для того, чтобы повернуть текст. Посмотрите на картинку.
Ну как? Интересно? Нет? Тогда давайте попробуем заняться чем-нибудь более практичным.
Какое сегодня число?
Мы можем не только сами рисовать картинки, но и использовать готовые! Немного кодировки, и у нас получится календарик, отображающий текущую дату (месяц, день и год). Ищем в Google заготовку для календаря, находим изображение в формате .svg – я изменил его размер и перевел в формат png. Посмотрите на заготовку:
Теперь у нас есть основа, и мы можем обработать ее с помощью функций GD и PHP. Предупреждаю, что я не претендую на звание величайшего в мире дизайнера – возможно, на сайте лучше смотрелась бы другая заготовка и другой шрифт. Так что дизайн за вами, а пока давайте посмотрим на код:
<?php
//Устанавливаем сообщения об ошибках
ini_set("display_errors", "1");
error_reporting(E_ALL);
//Устанавливаем тип содержимого
header('content-type: image/jpeg');
//Сохраняем дату
list($month, $day, $year) = explode('/', date('F/jS/Y'));
//Загружаем фоновое изоб.
$year);
//Пишем месяц
imagettftext($image, 13, 0, ($image_width - $pos_month[2]) / 2, 40, $white, $font_path, $month);
//Пишем день
imagettftext($image, 25, 0, ($image_width - $pos_day[2]) / 2, 80, $black, $font_path, $day);
//Пишем год
imagettftext($image, 8, 0, ($image_width - $pos_year[2]) / 2, 100, $black, $font_path, $year);
//Сохраняем изображение
imagejpeg($image, '', 100);
//Чистим память
imagedestroy($image);
?>
Итак, что мы здесь делаем? Что за функция list()? Давайте разберемся:
• Как всегда, мы устанавливаем тип содержимого, чтобы картинка отображалась правильно.
• В 10-й строчке вы видите функцию list function. Мы определяем формат даты с помощью функции explode() и сохраняем его. Таким образом можно упорядочивать любую информацию. Теперь нам открыт доступ к сведениям о текущем месяце, дне и годе.
• В строчках 22-24 мы пользуемся функцией imagettfbbox(), чтобы организовать формат даты. Функция обеспечивает отображение даты в заданном порядке, а для доступа к правому нижнему углу мы пишем $pos_month. Все это нужно для того, чтобы текст автоматически располагался правильно, не зависимо от его размера.
• Затем мы создаем каждую строчку по очереди и устанавливаем размер текста по оси Х.
Если не произошло никаких катастроф, у вас должна получиться представленная ниже картинка, с той лишь разницей, что дата будет той, что установлена на вашем компьютере – мой рисунок, как вы можете догадаться, статичен. За помощь со скриптом спасибо сайту catpin.
Кошки и фильтры изображений
Последнее, чему я сегодня вас научу, это фильтры изображений – очень интересная штука, поверьте мне. Функция imagefilter() берет готовое изображение и определенным образом изменяет его – например, переводит в черно-белый режим. Давайте посмотрим на картинку, с которой мы будем работать, в ее первоначальном виде.
А теперь сделаем кота черно-белым с помощью функции фильтрации изображений.
<?php
//Устанавливаем сообщения об ошибках
ini_set("display_errors", "1");
error_reporting(E_ALL);
//проверяем, установлено ли исходное изображение
if(iss.
> //чистим память
imagedestroy($image);
}
?>
Вышеприведенный скрипт является достаточно гибким, так что вы без труда сможете сделать любой рисунок черно-белым – вот так:
<img src='http://themeforest.s3.amazonaws.com/65_gd/grayscale.php?source=cat.jpg' alt='' />
Ставим в «источник» любую картинку, и вскоре она станет черно-белой. Тем, кто планирует использовать эту функцию на общедоступных серверах, потребуются дополнительные меры безопасности. Хотя в вышеприведенном скрипте указано изображение типа .jpeg, вы можете применять функцию для обработки любых графических файлов. Теперь наш кот выглядит так:
Другие фильтры:
В завершение урока я познакомлю вас с некоторыми другими графическими фильтрами и результатами их применения
Фильтр яркости
За яркость изображения отвечает третий параметр:
<?php
header('content-type:image/jpeg');
$image = imagecreatefromjpeg('cat.jpg');
//третий параметр устанавливает уровень яркости изображения.
imagefilter($image, IMG_FILTER_BRIGHTNESS, 40);
imagejpeg($image, '', 90);
imagedestroy($image);
?>
Гауссово размывание
Размывание по Гауссу, никаких дополнительных параметров
<?php
header('content-type:image/jpeg');
$image = imagecreatefromjpeg('cat.jpg');
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
imagejpeg($image, '', 90);
imagedestroy($image);
?>
Контрастность
Третий параметр определяет контрастность
<?php
header('content-type: image/jpeg');
$image = imagecreatefromjpeg('cat.jpg');
imagefilter($image, IMG_FILTER_CONTRAST, -15);
imagejpeg($image, '', 90);
imagedestroy($image);
?>
Удаление среднего значения (эффект рисунка)
Никаких дополнительных параметров.
<?php
header('content-type: image/jpeg');
$image = imagecreatefromjpeg('cat.jpg');
imagefilter($image, IMG_FILTER_MEAN_REMOVAL);
imagejpeg($image, '', 90);
imagedestroy($image);
?>
Цветовой баланс
Устанавливает насыщенность красного, зеленого, синего цветов, а также альфа-канала (по желанию) в перечисленном порядке
<?php
header('content-type:image/jpeg');
$image = imagecreatefromjpeg('cat.jpg');
//alpha channel parameter omitted below as it is optional.
imagefilter($image, IMG_FILTER_COLORIZE, 50, 0, 0);
imagejpeg($image, '', 90);
imagedestroy($image);
?>
До новых встреч…
Надеюсь, что вы более или менее разобрались с использованием в PHP библиотеки GD. Во второй части мы рассмотрим некоторые продвинутые техники и, конечно, узнаем еще больше интересного. Используйте библиотеку GD и свои творческие способности и обязательно расскажите мне, что у вас получилось!
ruseller.com
Здравствуйте, уважаемые читатели, прошло много времени с публикации предыдущей статьи и вот у меня появилось время пополнить коллекцию моих публикаций новым уникальным и полезным контентом. В этом посте я хочу привести пример работы с изображениями на php.
PHP работа с изображениями описана во многих источниках с подробным рассмотрением допустимых методов, но мне не встретилось ни одно материала о их практическом применении.
Научившись применять основные из функций php библиотеки GD (Graphics Draw) я нашел ей применение в решении одной задачи, суть которой сводится к выравниванию масштаба всех изображений в наборе.
Дано: набор изображений для товаров интернет магазина.
Если внимательно посмотреть на приведенные изображения, то мы увидим, что по габаритам они отличаются не только размерами холстов, на которых расположена продукция, но и сами товары имеют разные размеры.
Задача: нормализовать все картинки и получить из выше приведенного набора следующий результат.
Получившиеся изображения товаров должны быть, все одного разрешения и одного масштаба.
Решение задачи ( PHP работа с изображениями )
На первый взгляд мы имеем довольно хитрую задача, требующую особого алгоритма в ее решении, но зная основы в PHP для работы с изображениями и четкое представление того, что должно получиться, задача становится менее проблемной.
Давайте определимся, какую последовательность действий нам нудно выполнить, чтобы достичь желаемого результата, и выровнять все имеющиеся изображения товаров в магазине.
Вычислить размеры холста изображения;
Вычислить ширину и высоту товара на изображении;
Вычислить пропорции для сжатия холста вместе с изображением товара;
Если товар на холсте меньше эталонного, то не сжимать его;
Создать итоговый холст с нужными размерами и поместить в его центр получившуюся при сжатии картинку.
Выполнив каждый пункт текущего алгоритма, на выходе мы получим нормализованные картинки одинакового размера и масштаба.
Как вычислить размеры внутреннего рисунка на холсте
Самой сложной из подзадач является, поиск габаритов изображения:
На приведенном рисунке
P0 – точка начала области изображения товара
H1- высота товара
W1- ширина товара
H2- расстояние от верхней границы холста до точки P0
W2- расстояние от левой границы холста до точки P0
H3- высота всего изображения картинки товара
W3- ширина всего изображения картинки товара
Чтобы определить все неизвестные нам параметры, мы воспользуемся как встроенными средствами PHP по работе с изображениями, так и собственным "велосипедом".
Найти H3 и W3 можно php функцией getimagesize(), но как бы нам вычислить H1 и W1? Что если мы вернемся к статье по распознаванию капчи? Возьмем из этой статьи алгоритм преобразования изображения в бинарную матрицу.
Бинарная матрица – это представления изображения в виде единиц и нулей, все пикселы изображения отличающиеся от фонового цвета получат значение = 0 , а пикселы составляющие само изображение будут равны 1, в итоге мы получим такую матрицу:
Теперь мы можем запросто вычислить интервалы, в которых находятся 1-цы.
После того как нам станут известны все необходимые параметры, можно будет выполнять наш алгоритм нормализации картинок.
В готовом виде PHP скрипт будет выглядеть так:
<?php /** * Класс нормальзующий картинку по заданному разрешению */ class imageWorker { public $baseWidth = 150; // длина эталонного изображения (именно товара внутри картинки) public $baseHeight = 119; // высота эталонного изображения (именно товара внутри картинки) public $outImageWidth = 600; // длина изображения после обработки public $outImageHeight = 400; // высота изображения после обработки public $im = null; // дескриптор картитнки public $binaryMartix = null; // матричное представление картитнки public $saveBinaryMartixTofile = false; // сохранять матричное представление картитнки в файл public $dir = 'image/source/'; // расположения набора картинок public $saveMartix = false; // сохранять матричное представление картитнок public $extensions = array("", "gif", "jpeg", "png"); // допустимые картинки public $curImageWidth = 1; // ширина обрабатываемого изображения public $curImageHeight = 1; // высота обрабатываемого изображения public $imgFunctionProcess = "imagecreatefromjpeg"; // функция для работы с изображением public $curExt = ""; // расширение картинки public $curImageName = ""; // расширение картинки public $dirUpload = 'image/result/'; // папка для выгрузки (должна быть создана) function __construct($path, $w, $h) { $this->outImageWidth = $w; $this->outImageHeight = $h; $this->curImageName = $path; list($this->curImageWidth, $this->curImageHeight, $type) = getimagesize($this->dir.$path); // Получаем размеры и тип изображения (число) $ext = $this->extensions[$type]; if ($ext) { $this->imgFunctionProcess = 'imagecreatefrom'.$ext; // Получаем название функции, соответствующую типу, для создания изображения $func = $this->imgFunctionProcess; $this->curExt = $ext; $this->im = $func($this->dir.$path); // Создаём дескриптор для работы с исходным изображением if (!$this->im) { return false; } } else { echo 'Ошибка: Неизвестный формат изображения!'; return false; } $this->binaryMartix = $this->imageToMatrix($this->im, false); if ($this->saveBinaryMartixTofile) { $this->printMatrix($this->binaryMartix); } $res = $this->explodeMatrix($this->binaryMartix); $width = $res['resultInterval']; $cropX = $res['startInterval']; $this->binaryMartix = $this->imageToMatrix($this->im, true); $res = $this->explodeMatrix($this->binaryMartix); $height = $res['resultInterval']; $cropY = $res['startInterval']; $result = "Размеры изображения (".$path.") <br/>width=".$this->curImageWidth."px; <br/> height=".$this->curImageHeight."px;"; $result .= "<br/>Размеры изделия внутри изображения <br/>width=".$width."px; <br/> height=".$height."px;"; $result .= "<br/>Коэффициенты сжатия <br/>width=".$this->baseWidth / $width."px; <br/> height=".$this->baseHeight / $height."px;"; $result .= "<br/>Отрезать картинку с точки <br/>cropX=".$cropX." <br/> cropY=".$cropY." "; //$this->crop("2.png", $cropY, $cropX, $width, $height); // Вызываем функцию //$this->reSizeImage($name, $ext, $tmp, 0.3); echo $result; if ($this->baseHeight < $height) { $this->resizeImage($this->baseHeight / $height); } else { $this->resizeImage(1); }; imagedestroy($this->im); } function explodeMatrix($binaryMartix) { $temp = array(); // сложение столбцов для выявления интервалов for ($i = 0; $i < count($binaryMartix); $i++) { $sum = 0; for ($j = 0; $j < count($binaryMartix[0]); $j++) { $sum += $binaryMartix[$i][$j]; } $temp[] = $sum ? 1 : 0; } // вычисление интервалов по полученной строке $start = false; $countPart = 0; $arrayInterval = array(); foreach ($temp as $k => $v) { if ($v == 1 && !$start) { $arrayInterval[$countPart]['start'] = $k; $start = true; } if ($v == 0 && $start) { $arrayInterval[$countPart]['end'] = $k - 1; $start = false; $countPart++; } } //отсеиваем помехи (мелкие интервалы), Большая картинка, всяко больше 20px. $resultInterval = 1; $startInterval = 1; // начало интервала foreach ($arrayInterval as $key => $interval) { if (($interval['end'] - $interval['start']) > 20) { $resultInterval = $interval['end'] - $interval['start']; $startInterval = $interval['start']; } } return array( 'resultInterval' => $resultInterval, 'startInterval' => $startInterval ); } /** * Конвертация рисунка в бинарную матрицу * Все пиксели отличные от фона получают значение 1 * @param imagecreatefrompng $im - картинка в формате PNG * @param bool $rotate - горизонтальная или вертикальная матрица */ function imageToMatrix($im, $rotate = false) { $height = imagesy($im); $width = imagesx($im); if ($rotate) { $height = imagesx($im); $width = imagesy($im); } $background = 0; for ($i = 0; $i < $height; $i++) for ($j = 0; $j < $width; $j++) { if ($rotate) { $rgb = imagecolorat($im, $i, $j); } else { $rgb = imagecolorat($im, $j, $i); } //получаем индексы цвета RGB list($r, $g, $b) = array_values(imageColorsForIndex($im, $rgb)); //вычисляем индекс красного, для фона изображения if ($i == 0 && $j == 0) { $background = $r; } //echo "red=".$background; $sensitivity = 15; // если цвет пикселя не равен фоновому заполняем матрицу единицей $binary[$i][$j] = ($r > $background - $sensitivity) ? 0 : 1; } return $binary; } /** * Выводит матрицу на экран * @param type $binaryMartix */ function printMatrix($binaryMartix) { $return = ''; for ($i = 0; $i < count($binaryMartix); $i++) { $return .= "n"; for ($j = 0; $j < count($binaryMartix[0]); $j++) { $return .= $binaryMartix[$i][$j]." "; } } file_put_contents($this->dirUpload.$this->curImageName.".txt", $return); } /** * Функция для ресайза картинки * @paramint $koef коэффициент сжатия изображения * @return void */ public function resizeImage($koef) { // получение новых размеров $newWidth = $koef * $this->curImageWidth; $newHeight = $koef * $this->curImageHeight; // ресэмплирование $image_p = imagecreatetruecolor($this->outImageWidth, $this->outImageHeight); //делаем фон изображения белым, иначе в png при прозрачных рисунках фон черный $color = imagecolorallocate($image_p, 255, 255, 255); imagefill($image_p, 0, 0, $color); imagecopyresampled( $image_p, $this->im, ($this->outImageWidth - $newWidth) / 2, ($this->outImageHeight - $newHeight) / 2, 0, 0, $newWidth, $newHeight, $this->curImageWidth, $this->curImageHeight ); $func = "image".$this->curExt; $func($image_p, $this->dirUpload.$this->curImageName); imagedestroy($image_p); } }// конец тела класса /** * Массив имен файлов */ $imagesName = array( 'kameya_medium_1005858593.jpg', 'kameya_medium_1005862834.jpg', 'km0210-3_small.jpg', 'sd0201966_small.jpg', ); /** * Перебор массива имен файлов и нормализация изображений */ foreach ($imagesName as $image) { if (file_exists('image/source/'.$image)) { // каждую картинку нормальзуем и приведем к разрешению 200x200 пикселей $encrypt = new imageWorker($image, 200, 200); } else { continue; } }
Данный скрипт PHP работает с изображениями из папки image/source/ и по результату своего выполнения складывает нормализованные картинки в папку image/result/.
Выполнив поставленную задачу и на практике познакомившись с тем, как происходит в php работа с изображениями, мы получили опыт на основе, которого сможем приводить изображения товаров каталога в приятный вид.
progerson.ru
Подключение РHP Image Workshop
Скачиваем последнюю версию (на текущий момент это версия 2.0) c сайта разработчика, выгружаем на сервер папку /src/PHPImageWorkshop из архива. Теперь, в зависимости от версии php, типа скрипта, знаний и количества свободного времени, выбираем один из вариантов.
У меня php 5.3+ и используется автозагрузчик классов
Великолепно! Разработчики Image Workshop, за что им честь и хвала, использовали технологию пространств имён (namespaces). Осталось только расположить папку PHPImageWorkshop в директорию с библиотеками, с которой работает автолоадер.
К примеру, чтобы подключить PHP Image Workshop к Yii Framework, нужно загрузить её в директорию расширений (обычно это /protected/extensions) и добавить в action пару строк кода:
// Импорт класса Yii::import('ext.PHPImageWorkshop.*'); // Создание простанства имён PHPImageWorkshop Yii::setPathOfAlias('PHPImageWorkshop', Yii::getPathOfAlias('ext.PHPImageWorkshop').'/');
У меня php 5.3+ и я знать не хочу ни про какие автозагрузчики
Проще было узнать об автозагрузке, но, раз на то пошло, такой вариант тоже предусмотрен. Нужно один за другим, во всех подпапках открыть файлы классов библиотеки и раскомментировать вызов //require_once() в начале каждого файла. Вот пример:
// ImageWorkshop.php, строка 9: // If no autoloader, uncomment these lines: require_once(__DIR__.'/Core/ImageWorkshopLayer.php'); require_once(__DIR__.'/Exception/ImageWorkshopException.php');
После этого нужно подключить файл главного класса ImageWorkshop в коде своего скрипта:
// path/to/lib/ - путь до директории с PHPImageWorkshop на сервере require_once('path/to/lib/PHPImageWorkshop/ImageWorkshop.php');
У меня php 5.2 или ниже
Не завидую 🙁 Можно сплясать и поудалять все вкрапления namespaces из всех классов библиотеки. Инструкции можно найти тут, но проще обновить php.
Использование PHP Image Workshop
Есть два варианта использовать класс Image Workshop. Первый — создать псевдоним для имени класса ImageWorkshop и обращаться к этому псевдониму:
// Использование псевдонима ImageWorkshop для обращения к PHPImageWorkshopImageWorkshop use PHPImageWorkshopImageWorkshop; $mainLayer = ImageWorkshop::initXXX(...);
Второй вариант — каждый раз прописывать путь до класса вместе с пространством имён (для меня удобен именно он):
$mainLayer = PHPImageWorkshopImageWorkshop::initXXX(...);
Инициализация слоя
/** * Создание слоя из изображения * @param string $path - путь к изображению (или $_FILES["postName"]["tmp_name"] при загрузке файла) */ $mainLayer = PHPImageWorkshopImageWorkshop::initFromPath($path);
Наложение слоёв
/** * Наложение слоя $layer поверх слоя $mainLayer * @param ImageWorkshop $layer - накладываемый слой * @param integer $positionX - координата по оси X * @param integer $positionY - координата по оси Y * @param string $position - позиция (см. схему) */ $mainLayer->addLayerOnTop($layer, $positionX, $positionY, $position);
Изменение размера слоя
/** * Изменение размера слоя в пикселях * @param integer $newWidth - ширина * @param integer $newHeight - высота * @param boolean $converseProportion - сохранение пропорций * @param integer $positionX - координата по оси X * @param integer $positionY - координата по оси Y * @param string $position - позиция (см. схему) */ $mainLayer->resizeInPixel($newWidth, $newHeight, $converseProportion, $positionX, $positionY, $position);
Поворот слоя
/** * Поворот (в градусах) * @param float $degrees - угол поворота */ $mainLayer->rotate($degrees);
Создание и добавление текстового слоя
/** * Создание текстового слоя * @param string $text - текст * @param string $fontPath - путь к файлу со шрифтом * @param integer $fontSize - размер шрифта * @param string $fontColor - цвет шрифта * @param integer $textRotation - угол поворота текста (в градусах) * @param integer $backgroundColor - цвет фона текста */ $textLayer = PHPImageWorkshopImageWorkshop::initTextLayer($text, $fontPath, $fontSize, $fontColor, $textRotation, $backgroundColor); $mainLayer->addLayerOnTop($textLayer, $positionX, $positionY, $position);
Сохранение изображения
/** * Сохраняет изображение по указанному пути * @param string $folder - директория для сохраняемого изображения * @param string $imageName - имя файла * @param boolean $createFolders - создание папок, если таковых нет * @param string $backgroundColor - цвет фона * @param integer $imageQuality - качество изображения */ $mainLayer->save($folder, $imageName, $createFolders, $backgroundColor, $imageQuality);
Отображение сформированного изображения
/** * Возвращает gd-resource из изображения * @param string $backgroundColor - цвет фона */ $image = $mainLayer->getResult($backgroundColor); header('Content-type: image/jpeg'); header('Content-Disposition: filename="collage.jpg"'); imagejpeg($image, null, $quality); exit;
Позиционирование
В некоторых методах PHP Image Workshop позиционирование и точка отсчёта кординат определяется строкой $position, состоящей из двух букв. На схеме ниже показаны все возможные варианты позиционирования. Стрелки указывают направление, в котором будут отсчитываться координаты в случае указания той или иной позиции:
Пример использования PHP Image Workshop для создания коллажа
Представим, что нам нужно сделать модный коллаж. У нас есть фон collageBackground.jpg:
На этот фон нужно наложить, уменьшив размер и повернув, 4 фотографии одежды collageImage1.jpg…collageImage4.jpg:
Затем, поверх фотографий, нужно наложить такую вот маску collageMask.png, а поверх — написать цену 6 296 руб. Для добавления надписей потребуется файл шрифта. В данном случае — OpenSans-Bold.ttf:
Вот, собственно, сам код для создания коллажа:
// Настройки $imagePath = 'path/to/images'; // путь до папки с исходными изображениями и шрифтами $quality = 95; // качество изображения создаваемого коллажа // Создание базового слоя с фоном $mainLayer = PHPImageWorkshopImageWorkshop::initFromPath($imagePath.'/collageBackground.jpg'); // Создание слоя с первым изображением $imageLayer1 = PHPImageWorkshopImageWorkshop::initFromPath($imagePath.'/collageImage1.jpg'); // Ресайз картинки на первом слое $imageLayer1->resizeInPixel(180, null, true); // Поворот картинки на первом слое $imageLayer1->rotate(-15); // Добавление первого слоя поверх основного слоя с фоном $mainLayer->addLayerOnTop($imageLayer1, 105, 145, "LT"); // То же самое со вторым, третьим и четвёртым изображениями, меняя углы поворота и координаты // ... // Добавляем слой с маской $maskLayer = PHPImageWorkshopImageWorkshop::initFromPath($imagePath.'/collageMask.png'); $mainLayer->addLayerOnTop($maskLayer, 0, 0, "LT"); // Добавление текстового слоя с ценой: $textSumLayer = PHPImageWorkshopImageWorkshop::initTextLayer('6 296', $imagePath.'/OpenSans-Bold.ttf', 20, "FFFFFF", 12); $mainLayer->addLayerOnTop($textSumLayer, 510, 513, "LT"); // Добавление текстового слоя с надписью 'руб.' $textRubLayer = PHPImageWorkshopImageWorkshop::initTextLayer('руб.', $imagePath.'/OpenSans-Bold.ttf', 15, "FFFFFF", 12); $mainLayer->addLayerOnTop($textRubLayer, 585, 505, "LT"); // Сохранение готового изображения (если требуется) $mainLayer->save($imagePath, 'collage.jpg', true, null, $quality); // Если требуется отдать созданное изображение в браузер $image = $mainLayer->getResult(); header('Content-type: image/jpeg'); header('Content-Disposition: filename="collage.jpg"'); imagejpeg($image, null, $quality); exit;
А вот и результат!
В этой статье показаны только основные возможности PHP Image Workshop. Для ознакомления с полным списком необходимо заглянуть на страницу документации на сайте разработчика.
mithrandir.ru
Решение задачи ( PHP работа с изображениями )
На первый взгляд мы имеем довольно хитрую задача, требующую особого алгоритма в ее решении, но зная основы в PHP для работы с изображениями и четкое представление того, что должно получиться, задача становится менее проблемной.
Давайте определимся, какую последовательность действий нам нудно выполнить, чтобы достичь желаемого результата, и выровнять все имеющиеся изображения товаров в магазине.
- Вычислить размеры холста изображения;
- Вычислить ширину и высоту товара на изображении;
- Вычислить пропорции для сжатия холста вместе с изображением товара;
- Если товар на холсте меньше эталонного, то не сжимать его;
- Создать итоговый холст с нужными размерами и поместить в его центр получившуюся при сжатии картинку.
Выполнив каждый пункт текущего алгоритма, на выходе мы получим нормализованные картинки одинакового размера и масштаба.
lifeexample.ru
Сборка
Для успешного выполнения примеров из этой статьи необходимо, чтобы PHP был собран с поддержкой второй версии библиотеки GD.
Для того, чтобы узнать наличие и используемую версию графической библиотеки, воспользуемся всеми нами, без сомнения, любимой функцией phpinfo(), и взглянем на раздел «GD»:
gd GD Support enabled GD Version bundled (2.0.15 compatible) ...
Если ничего похожего вы не нашли — значит, PHP собран без поддержки графической библиотеки, и придется его пересобирать (или попросить об этом админа).
В противном случае, сначала взглянем на строку «GD Version». Если версия GD — первая (например, 1.6), то часть материала этой статьи вам не подойдет (и, в любом случае, рекомендую обновиться до второй версии). Вторая же версия тоже может быть разная. 🙂 Обратите внимание на слово «bundled». Его присуствие означает, что PHP собран с библиотекой GD, поставляемой вместе с PHP: именно эту библиотеку рекомендуется использовать, так как разработчики PHP исправили множество ошибок и недочетов, присущих оригинальной GD. Впрочем, если используется внешняя библиотека (слово «bundled» в строке «GD Version» отсутствует) — ничего страшного, все приведенные ниже примеры будут работать.
В нижеследующих строках мы видим, какие графические форматы поддерживаются данной конфигурацией библиотеки GD. В частности, работа с форматом GIF поддерживается в режиме «только чтение» из-за проблем с лицензированием используемого в GIF алгоритма компрессии.
Итак, если требуется пересборка PHP, следует это и сделать, загрузив при необходимости последнюю версию PHP, и указать при сборке параметр:
—with-gd[=location]
Необязательный параметр location указывает путь к внешней библиотеке GD. Если его опустить (в смысле, не указывать) — используется bundled-версия.
Для поддержки работы с шрифтами TrueType, обсуждаемой в главе «Вывод текста…», также понадобится наличие библиотеки FreeType и следующие параметры конфигурационной строки:
- —enable-gd-native-ttf
- —with-freetype-dir=/путь/к/библиотеке/FreeType
Примечание: Выше подразумевалось, что используется Unix-подобная ОС. Если же PHP установлен локально, да еще и под Windows — то надо просто раскомментить одну строчку в php.ini — надеюсь, догадаетесь, какую. 🙂
Генерация изображения с помощью PHP
Надеюсь, вы прекрасно осознаете, что нельзя вот так вот просто взять и вывести картинку посреди HTML-кода в том же самом скрипте (если не осознаете, прочтите внимательно эту статью): в HTML-документе мы разместим, как и обычно, тэг <img>, а в его атрибуте src укажем не картинку, как обычно, а PHP-скрипт:
<img src="/i/articles/image/image.php">
Теперь приступим к написанию этого самого image.php.
Заголовок. Он же header.
Прежде всего, как броузер узнает, что image.php — это не HTML-документ и не что-то еще, а картинка?
Тип документа броузер определяет по заголовку Content-type. На самом деле, этот заголовок — обязательный и всегда присуствует; по умолчанию, PHP услужливо «отдает» заголовок Content-type: text/html. Обычно это поведение PHP нам прекрасно подходит — но не в данном случае. Придется нам вывести нужный заголовок самим:
Приступим теперь непосредственно к генерации картинки.
Создание изображения
Для создания изображения, в нашем распоряжении две функции:
1. imagecreate(). С помощью этой функции можно создать изображение на основе палитры, содержащей фиксированный набор цветов. Каждый цвет палитры необходимо описать с помощью функции imagecolorallocate(). Этот способ создания изображения был единственным при работе с первой версией GD, и необходим при работе с ориентированными на палитру форматами, такими как GIF. Однако введенный во второй версии (и отныне рекомендуемый разработчиками) способ, на мой взгляд, гораздо более удобен.
2. imagecreatetruecolor(). Эта функция создает TrueColor-изображение, то есть цвет каждой точки определяется произвольным цветом, задаваемым в координатах RGB. Помимо того, что это удобнее, чем работа с палитрой, такой подход позволяет производить масштабирование изображения с гораздо меньшими потерями качества. Но об этом позже. Сейчас просто создадим изображение:
Функция imagecreatetruecolor (как, кстати, и функция imagecreate), принимает два обязательных целочисленных параметра — ширину (в нашем примере — 80 пикселей) и высоту (60 пикселей) картинки, и возвращает идентификатор ресурса (в данном случае — изображения), который мы присваиваем переменной $image, которой в дальнейшем будем постоянно пользоваться.
Если по какой-либо страшной причине (недостатке памяти, например) создать изображение не получается, функция возвращает false — в этом случае мы прерываем работу скрипта.
Хотя мы с этим изображением, пока что, ничего не делаем, мы обязаны освободить выделенную для него память с помощью функции imagedestroy(): к сожалению, автоматическое освобождение памяти происходит не всегда, и игнорирование рекомендации всегда использовать imagedestroy может привести к весьма серьезным утечкам памяти.
Немножко порисуем
Итак, с помощью функции imagecreatetruecolor() мы создали «труколорное» и, если верить документации, черное изображение размером 80×60. Так что, те, в чьи планы входит создание Web-галереи репродукций «квадрата Малевича», могут смело переходить к следующей главе. 🙂 Для остальных, продолжим. Нарисуем на картинке что-нибудь содержательное.
Палка, палка, огуречик, вот и вышел человечек 🙂
Используемые для рисования функции весьма просты для понимания. Их описание (как и описание всех GD-функций) вы найдете здесь. В случае трудностей с английским, просто «поиграйтесь», меняя значения параметров — как вы, несомненно, уже догадались, это ни что иное, как координаты, и цвета в виде 0xRRGGBB.
Подробнее же мы разберем вот эту строку: imagepng($image);
Выше мы создали в памяти изображение, и всячески над ним извращались. 🙂 Это мы делали без привязки к какому-либо выходному формату — просто работали с набором байтов в памяти. А вот функции вида imageформат (imagepng(), imagejpeg(), imagewbmp()…) генерируют на основе этого самого набора байтов, на который ссылается идентификатор $image, картинку в соответствующем формате, и выводят ее в выходной поток — то бишь, проще говоря, в броузер.
Нелишне здесь вспомнить и о строке header(‘Content-type: image/png’), где мы указали тип документа — обратите внимание: здесь png, и там png. 🙂 Справедливости ради, надо заметить, что большинство броузеров воспринимают только часть «image» этого заголовка, а формат самой картинки уже определяют по ее заголовкам, характерным для каждого формата; однако, лучше все же не надеяться на «интеллект» броузера и указывать правильный формат изображения.
Вывод текста
…а также диаграммы и коллекционеры марок.
Используя полученные в результате рисования смайликов знания, попробуем порисовать диаграммы, а заодно и научимся выводить на картинках текст (не забудьте только о библиотеке FreeType, о необходимости наличия которой сказано в главе «Сборка».
Предположим, вы располагаете следующей важной статистической информацией о коллекционерах почтовых марок:
…и горите желанием представить эту информацию в виде «столбиков» — для удобного сравнения. Столбики мы рисовать уже умеем — стоит только немножко вспомнить азы арифметики:
Обратите внимание на строку imagestring($image, 1, GRAPH_OFFSET_LEFT / 2, $Y — 4, $value, 0x000000); с помощью которой мы выводим числа на координатной оси. Второй параметр — один из встроенных в GD шрифтов (от 1 до 5, чем больше число — тем крупнее шрифт).
Так зачем же, скажете вы, нам какие-то там TrueType-шрифты и FreeType-библиотеки, если мы и так прекрасно пишем на картинке? А вот затем, скажу я вам, что писать-то мы хотим по-русски, а встроенные шрифты о существовании кириллицы даже и не подозревают. А нам надо бы подписать столбики именно по-русски. Да и выбор встроенных шрифтов невелик.
Итак, нам понадобится:
- Функция imagettftext(), которая рисует выбранным TrueType-шрифтом на картинке,
- Какой-нибудь кириллический TrueType-шрифт. Возьмем, например, arial.ttf из всеми нами любимой Винды, да не просто возьмем, а положим его туда, где лежит наш скрипт,
- Поскольку функция imagettftext() воспринимает кодировку Unicode, но никак не Windows-1251, то нам пригодится вот такая функция для соответствующего преобразования:
- Функция imagettfbbox(), которая поможет нам вычислить высоту и ширину выводимого шрифтом текста.
Сначала потренируемся:
Тренировка прошла успешно — всех поприветствовали. Можно теперь приступать к нашим диаграммам.
Барабанная дробь… Запускаем…
Ура! Получилось! 🙂
Изменение размера
…thumbnails, или «превьюшки».
Часто перед веб-разработчиком стоит задача генерации уменьшенных копий изображений для предварительного просмотра; можно даже сказать, что это — одно из самых распространенных применений библиотеки GD.
В GD1, поддерживающей только изображения на основе палитры, присуствовала лишь функция imagecopyresized(); качество уменьшенных изображений, генерируемых этой ей, мягко говоря, оставляло желать лучшего: работая с фиксированной палитрой, ограниченной 255 цветами, весьма затруднительно обеспечить качественный антиалиасинг.
Во второй версии библиотеки, с появлением поддержки TrueColor и imagecreatetruecolor(), введена новая функция — imagecopyresampled(), обеспечивающая весьма достойное качество «превьюшек».
Продемонстрируем работу с этой функцией. Предположим, у нас есть файл original.jpg, допустим, 400×250 пикселей, и мы хотим создать ее уменьшенный вариант small.jpg — 100×60. Можно поступить так:
Этот код работает, однако искажения, получаемые при непропорциональном изменении размера, выглядят не особенно симпатично. Более того, код получился не особенно-то универсальным: мало того, что мы можем работать только с JPEG-файлами, у нас еще и жестко заданы имена файлов и размеры получаемого изображения.
Итак, пусть у нас есть файл в любом поддерживаемом GD формате, и мы хотим создать «превьюшку» заданного размера в формате JPEG. Разработаем для этой цели функцию imgResize. Комментариев здесь почти не будет — так как используются уже изученные приемы и обычная арифметика. Постарайтесь разобраться в этом коде самостоятельно.
Разобрались? Поместим этот код в файл imgresize.php.
Пример использования функции img_resize:
phpwiki.ru
От автора: очень часто при разработке скриптов необходимо работать с изображениями, используя язык PHP. К примеру, генерация изображений с нуля или редактирование уже существующих и т.д. Поэтому в данном уроке мы с Вами изучим основы работы с библиотекой GD, которая предназначена для обработки изображений средствами языка PHP.
Введение
Язык PHP достаточно разнообразен и его использование не ограничивается только созданием скриптов, выполняющим различные манипуляции с данными. Он также позволяет работать с различными графическими элементами, в частности с изображениями, разных форматов. Для этих целей написана, специальная библиотека, под названием GD, которая расширяет его стандартный функционал. Данная библиотека, чем-то похожа на небольшой графический редактор, используя который, Вы сможете легко обрабатывать изображения, используя только язык PHP. Библиотека GD, позволяет создавать новые изображения, редактировать уже существующие, копировать одни изображения на другие, изменять размеры, а также наносить текст на изображения.
Поэтому, так как, библиотека является расширением, значит необходимо убедиться, что она подключена в Вашем интерпретаторе языка PHP. Для этого необходимо открыть главный конфигурационный файл PHP – php.ini. Если Вы используете Denver, значит Вам необходимо, перейти в виртуальный диск, созданный им (в моем случае это диск Z). И затем по адресу: Z:usrlocal php5. В корне папки php5 Вы найдете необходимый файл. Далее открываем данный файл в текстовом редакторе, находим строчку: extension=php_gd2.dll
Если напротив данной строки, нет символа “;” (точка с запятой), значит расширение подключено, если же символ есть – его необходимо удалить и перезапустить Denver. В этом случае Вы подключите библиотеку. Теперь можно приступать к работе с данной библиотекой.
Основы создания и редактирования изображений
Для того чтобы вывести на экране изображение, необходимо использовать тег img и в атрибуте src, данного тега, нужно указать путь к изображению. Но в нашем случае изображение создается при помощи языка PHP. Поэтому в атрибуте src мы укажем путь к файлу php, который создаст нужное нам изображение. Значит, создаем файл index.php, который будет выводить на экран изображение, со следующим содержимым:
Здесь, мы определяем кодировку, путем отправки заголовка браузеру и выводим изображение при помощи тега img. Далее создаем файл index.php и начинаем писать код. Итак, как в любом графическом редакторе, перед тем как создать изображение, необходимо создать пустой лист, или пустое изображение. Непосредственно на котором, мы будем создавать нужное нам изображение. Библиотека GD не исключение, поэтому первым делом создадим пустое изображение:
Функция imagecreatetruecolor() — создает новое полноцветное изображение, с заданными размерами. Размеры (ширину и высоту) передаем параметрами к данной функции. Функция возвращает дискриптор (ресурс), открытого изображения, необходимый для дальнейшей работы с ним. Так как он, как бы, идентифицирует наше изображение. Теперь давайте выведем на экран наше изображение. Для этого добавим следующий код:
Смотрите, первым делом отправляем заголовок браузеру – то есть, сообщаем, что тип отображаемого контента – это изображение типа image/jpeg. Затем вызываем функцию imagejpeg(), которая выводит или сохраняет изображение, в зависимости от состояния второго параметра. Параметры передаваемые данной функции:
Теперь давайте посмотрим в браузере, что у нас получилось:
Теперь, давайте посмотрим, как создать изображение, используя существующее. К примеру, исходное изображение имеет формат jpeg, значит для изображения формата jpeg, необходимо создать следующую функцию:
Функция imagecreatefromjpeg() — создает новое изображение из файла или URL (формата jpeg) и возвращает его дискриптор. Параметром необходимо передать путь к изображению. Если у Вас исходное изображение другого формата, то воспользуйтесь одной из следующих функций:
Далее определим ширину и высоту созданного пустого изображения:
Думаю, Вы уже догадались, что функция imagesx() – возвращает ширину выбранного изображения в пикселях. А функция imagesу() – высоту. Обеим функциям необходимо передать параметром дискриптор открытого изображения. Перед тем, как изобразить что то, на пустом изображении, необходимо определить цвет, при помощи которого мы будем отображать различные фигуры, текст и т.д. Для этого используется функция imagecolorallocate($im,$red,$green,$blue), которая создает цвета для изображений. При этом возвращает идентификатор цвета в соответствии с заданными RGB параметрами. То есть для каждого цвета, который Вы хотите определить, необходимо вызывать данную функцию. Параметрами необходимо передавать следующие значения:
Теперь давайте, определим несколько цветов:
Теперь давайте нарисуем закрашенный прямоугольник на пустом изображении. Для этого добавим следующий код:
Функция imagefilledrectangle() – рисует закрашенный прямоугольник, на выбранном изображении. Параметры, которые необходимо передать:
Давайте перейдем в браузер и посмотрим, что у нас получилось:
Далее, давайте научимся рисовать окружности и дуги. Для этого используем функцию imagefilledarc():
Параметры, которые необходимо передать данной функции:
Давайте перейдем в браузер и посмотрим, что у нас получилось:
Вот мы с Вами получили окружность. Теперь давайте еще добавим несколько окружностей и дуг:
Теперь на экране мы увидим смайлик:
Далее, давайте посмотрим как отобразить на изображении первый символ произвольной строки. Для этого используем две аналогичные функции:
Функции imagechar() и imagecharup(), аналогичны по своей работе, только imagechar() – выводит символ по горизонтали, а imagecharup() – по вертикали. Параметры, которые необходимо передать данным функциям:
Теперь давайте посмотрим, каким образом можно исказить изображение. Для этого мы используем следующий код:
Итак, функция imageconvolution() — накладывает искривляющую матрицу на изображение, тем самым, искажая его нормальный вид. Параметры, которые необходимо передать данной функции:
Теперь давайте посмотрим, как применение последней функции, повлияет на изображение:
Теперь научимся изображать многоугольники. Для этого используем функцию imagefilledpolygon(), которая изображает закрашенный многоугольник:
Параметры, которые необходимо передать данной функции:
Давайте посмотрим, что у нас получилось, при этом закомментируем строки, искажающее изображение:
Вот мы с Вами изобразили многоугольник. Теперь давайте нарисуем простую линию. Для этого используем функцию imageline():
Функция imageline() – изображает прямую линию. Параметры, которые необходимо передать:
Давайте перейдем в браузер и посмотрим, что получилось:
Как Вы видите линия успешно нарисована.
Копирование изображений
Теперь давайте научимся копировать и изменять размеры изображений. Так как у нас есть открытое изображение, я предлагаю скопировать его на наш рисунок который мы создаем в данном уроке. Для этого воспользуемся функцией imagecopy(), которая выполняет копирование изображений, как полностью так и по частям. Итак вызовем данную функцию:
Параметры которые необходимо передать данной функции:
Теперь давайте перейдем в браузер и посмотрим, что у нас получилось:
Как Вы видите мы скопировали часть изображения. Теперь давайте не просто скопируем изображение, а как бы наложим одно на другое. Для этого мы используем функцию — imagecopymerge(), которая выполняет копирование изображения, всего или только его части, с наложением. По своей работе данная функция полностью аналогична предыдущей функции, и отличается только тем, что она принимает на один параметр больше (параметр pct). Который отвечает за наложение одного изображения на другое, и может варьироваться от 0 до 100. Когда pct = 0, наложения не происходит. В случае значения 100 эта функция ведет себя аналогично функции imagecopy(). Давайте вызовем данную функцию:
Зададим степень наложения 50% и давайте посмотрим, что получилось:
В библиотеке GD есть еще одна аналогичная функция, которая выполняет копирование с наложением, за исключением того что копирование и наложение происходит в градациях серого. То есть копируемое изображение, будет наложено на исходное и будет черно-белым. Вот данная функция: imagecopymergegray(), передавать ей необходимо те же параметры, что и функции imagecopymerge().
И последняя функция, которую мы с Вам рассмотрим в данном разделе — это функция imagecopyresampled(), которая выполняет копирование изображений с масштабированием. Поэтому давайте вызовем данную функцию:
Параметры, которые необходимо передать данной функции:
Теперь давайте перейдем в браузер и посмотрим, что у нас получилось:
Нанесение текста на изображение
Для нанесения текста на изображение, используем функцию imagettftext(), которая рисует текст на изображении шрифтом TrueType. Для данного урока я подготовил два TrueType шрифта и скопировал их в папку fonts. Теперь давайте вызовем данную функцию:
Параметры которые необходимо передать данной функции:
Теперь давайте перейдем в браузер и посмотрим, что у нас получилось:
На этом этапе данный урок можно завершать. Мы с Вами рассмотрели основы работы с библиотекой GD, конечно она содержит еще много интересных функций, но зная ее основы, думаю Вам не составит труда разобраться в остальных.
Всего Вам доброго, удачного кодирования! И увидимся в следующих уроках!!!
webformyself.com