Gd php

Если вы заядлый 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’.

   
//Устанавливаем отображение сообщений об ошибках
ini_set ("display_errors", "1");
error_reporting(E_ALL);

//Устанавливаем тип содержимого
header('content-type: image/png');

//Определяем размеры изображения
//125px width, 125px height
$image = imagecreate(125, 125);

//Выбираем цвет фона
$blue = imagecolorallocate($image, 0, 0, 255);

//Устанавливаем еще один цвет – просто чтобы убедиться, что при отображении рисунка фоновым будет именно цвет, установленный первым ()
//Обратите внимание – квадрат будет синего, а не красного цвета.
$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='' />

Если все было сделано правильно, вы увидите вот такой синий квадрат:

Gd php

Привет, Мир

Теперь, когда мы научились создавать изображения, давайте попробуем сделать изображение с текстом, написанным выбранным нами шрифтом. Мы можем воспользоваться любым шрифтом из каталога TrueType Font (.tff). В следующих примерах я буду использовать шрифт ‘Advent’. Давайте напишем «Hello World» на темно-сером квадрате. Внимание, смотрим на код, а затем подробно разбираем каждый шаг.

<?php
//Устанавливаем сообщения об ошибках
ini_set("display_errors", "1");
error_reporting(E_ALL);

//устанавливаем тип содержимого
header('content-type: image/png');
.
te, $font_path, $string);

//Сохраняем изображение
imagepng($image);

//Чистим память
imagedestroy($image);
?>

Сохраним код в файле ‘hello_world.php’и будем открывать его таким же способом, какой был указан выше. Итак, что здесь нового?

• Мы установили размер изображения 300*300 пикселей и использовали темно-серый фон
• Обратите внимание, как мы указывали путь к шрифту, используя имя шрифта: дело в том, что далее в коде нам придется накладывать текст на изображение. Кроме того, не забывайте, что имя шрифта пишется без расширения. Впрочем, это зависит от того, какую версию GD-библиотеки использует PHP: если названием шрифта не начинается с ‘/’, то потребуется расширение ttf – то есть, если перед названием файла нашего шрифта не стоит /, то в конце будет автоматически добавлено ttf.
• Затем мы пишем «Hello World!» и сохраняем текст для дальнейшего использования
• Важнейшая функция, использованная в этом коде – это imagettftext(), требующая указания 8 параметров: путь к изображению, размер изображения, угол наклона, ось x, ось y, цвет, шрифт, текст (в таком порядке)

Сохраните код, откройте его любым способом, и вы увидите вот такую картинку:


Gd php

Поверните его!

Вы заметили, что у функкции 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 градусов (как в предыдущем примере) – это все, что требуется для того, чтобы повернуть текст. Посмотрите на картинку.

Gd php

Ну как? Интересно? Нет? Тогда давайте попробуем заняться чем-нибудь более практичным.

Какое сегодня число?

Мы можем не только сами рисовать картинки, но и использовать готовые! Немного кодировки, и у нас получится календарик, отображающий текущую дату (месяц, день и год). Ищем в Google заготовку для календаря, находим изображение в формате .svg – я изменил его размер и перевел в формат png. Посмотрите на заготовку:

Gd php

Теперь у нас есть основа, и мы можем обработать ее с помощью функций 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'));

= imagettfbbox(8, 0, $font_path, $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.

Gd php

Кошки и фильтры изображений

Последнее, чему я сегодня вас научу, это фильтры изображений – очень интересная штука, поверьте мне. Функция imagefilter() берет готовое изображение и определенным образом изменяет его – например, переводит в черно-белый режим. Давайте посмотрим на картинку, с которой мы будем работать, в ее первоначальном виде.

Gd php

А теперь сделаем кота черно-белым с помощью функции фильтрации изображений.

<?php
//Устанавливаем сообщения об ошибках
ini_set("display_errors", "1");
error_reporting(E_ALL);

//проверяем, установлено ли и.
jpeg($image, '', 90);

//чистим память
imagedestroy($image);
}
?>

Вышеприведенный скрипт является достаточно гибким, так что вы без труда сможете сделать любой рисунок черно-белым – вот так:

<img src='http://themeforest.s3.amazonaws.com/65_gd/grayscale.php?source=cat.jpg' alt='' />

Ставим в «источник» любую картинку, и вскоре она станет черно-белой. Тем, кто планирует использовать эту функцию на общедоступных серверах, потребуются дополнительные меры безопасности. Хотя в вышеприведенном скрипте указано изображение типа .jpeg, вы можете применять функцию для обработки любых графических файлов. Теперь наш кот выглядит так:

Gd php

Другие фильтры:

В завершение урока я познакомлю вас с некоторыми другими графическими фильтрами и результатами их применения

Фильтр яркости

За яркость изображения отвечает третий параметр:

<?php
header('content-type:image/jpeg');

$image = imagecreatefromjpeg('cat.jpg');
//третий параметр устанавливает уровень яркости изображения.
imagefilter($image, IMG_FILTER_BRIGHTNESS, 40);
imagejpeg($image, '', 90);
imagedestroy($image);
?>

Gd php

Гауссово размывание

Размывание по Гауссу, никаких дополнительных параметров

<?php
header('content-type:image/jpeg');

$image = imagecreatefromjpeg('cat.jpg');
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
imagejpeg($image, '', 90);
imagedestroy($image);
?>

Gd php

Контрастность

Третий параметр определяет контрастность

<?php
header('content-type: image/jpeg');
$image = imagecreatefromjpeg('cat.jpg');
imagefilter($image, IMG_FILTER_CONTRAST, -15);
imagejpeg($image, '', 90);
imagedestroy($image);
?>

Gd php

Удаление среднего значения (эффект рисунка)

Никаких дополнительных параметров.

<?php
header('content-type: image/jpeg');
$image = imagecreatefromjpeg('cat.jpg');
imagefilter($image, IMG_FILTER_MEAN_REMOVAL);
imagejpeg($image, '', 90);
imagedestroy($image);
?>

Gd php

Цветовой баланс

Устанавливает насыщенность красного, зеленого, синего цветов, а также альфа-канала (по желанию) в перечисленном порядке

<?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);
?>

Gd php

До новых встреч…

Надеюсь, что вы более или менее разобрались с использованием в PHP библиотеки GD. Во второй части мы рассмотрим некоторые продвинутые техники и, конечно, узнаем еще больше интересного. Используйте библиотеку GD и свои творческие способности и обязательно расскажите мне, что у вас получилось!

ruseller.com

Работа с изображениями и библиотека GD

Работа с изображениями и библиотека GD

Применение и установка

Здесь мы рассмотрим идею создания рисунков сценарием «на лету». Это очень может пригодиться при создании сценариев-счетчиков, графиков, картинок-заголовков, да и многого другого.

Для деятельности такого рода существует специальная библиотека под названием GD. Она содержит в себе множество функций (такие как рисование линий, растяжение/сжатие изображения, заливка до границы, вывод текста и т.д.), которые могут использовать программы, поддерживающие работу с данной библиотекой.

Поддержка GD включается при компиляции и установке PHP. Возможно, некоторые хостинг-провайдеры ее не имеют.

Для подключения модуля на вашем локальном диске нужно открыть в Блокноте файл php.ini из каталога с файлами Windows (обычно C:Windows)

Затем:1. Настройте следующий параметр:extension_dir=C:Program FilesPHP4extensions

Здесь мы уведомляем PHP, что модули он должен искать в каталоге C:Program FilesPHP4extensions.

2. Найдите закомментированную строку ;extension=php_gd.dll

и разкомментируйте ее, т.е. уберите ; в начале.

3. Сохраните изменения в файле php.ini

imageTypes

Определение графических форматов, поддерживаемых PHP.

Синтаксис:

int imageTypes(void)

Функция возвращает битовую маску графических форматов, которые поддерживает данная версия библиотеки GD: IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP

<?php
if(imageTypes() && IMG_PNG) echo "формат PNG поддерживается";

?>

GetImageSize

Определение размеров рисунка.

Синтаксис:

array GetImageSize(string filename [,array imageinfo])

Эта функция предназначена для быстрого определения в сценарии размеров (в пикселях) и формата рисунка, имя файла которого передано ей в первом параметре. Она возвращает список из четырех элементов. Первый элемент (с ключем 0) хранит ширину картинки в пикселях, второй (с ключем 1) — его высоту. Ячейка массива с ключем 2 определяется форматом изображения: 1, если это GIF, 2 в случае JPG, 3 для PNG и 4 — SWF. Следующий элемент, имеющий ключ 3, будет содержать после вызова функции строку примерно следующего вида: height=sx width=sy, где sx и sy — соответственно ширина и высота изображения. Это применение задумывалось для того, чтобы облегчить вставку данных о размере изображения в тег <img>, который может быть сгенерирован сценарием:

<?php
$size_img=GetImageSize("img/image.jpg");
echo "<IMG src='img/image.jpg' $size_img>";

?>

Если при обращении к функции был указан второй необязательный массив imageinfo, в него можно записать дополнительную информацию о файле. Это могут быть, например, различные маркеры JPG APP (внедренная информация).Функция iptcparse() позволяет конвертировать эти данные в читаемый вид:

<?php
$size_img=GetImageSize("img/image.jpg", &$info_arr);
if(isset($info_Arr["APP13"])) {
$iptc = iptcparse($info_arr["APP13"]);
var_dump($iptc);
};

?>

Данная функция не требует наличия библиотеки GD.

imageSX

Определение ширины рисунка.

Синтаксис:

int imageSX(int im)

Функция возвращает горизонтальный размер изображения, заданного своим идентификатором im, в пикселях.

imageSY

Определение высоты рисунка.

Синтаксис:

int imageSY(int im)

Функция возвращает вертикальный размер изображения, заданного своим идентификатором im, в пикселях.

read_exif_data

Чтение заголовков EXIF из файла JPEG.

Синтаксис:

array read_exif_data(string filename)

Параметр filename не может быть URL.

Функция возвращает ассоциативный массив, в котором индексами являются имена заголовков EXIF.

Заголовки EXIF обычно хранят информацию цифровых камер (в различном виде).

<?php
$exif = read_exif_data("img/file.jpg");
print_r($exif);

?>

Данный пример выведет что-то наподобие:

Array( [FileName] => file.jpg [FileDateTime] => 1064566998 [FileSize] => 31646 [CameraMake] => Eastman Kodak Company [CameraModel] => KODAK DC265 ZOOM DIGITAL CAMERA (V01.00) [DateTime] => 2002:08:31 02:12:45 [Height] => 454 [Width] => 620 [IsColor] => 1 [FlashUsed] => 0 [FocalLength] => 8.0mm [RawFocalLength] => 8 [ExposureTime] => 0.004 s (1/250) [RawExposureTime] => 0.0040000001899898 [ApertureFNumber] => f/ 9.5 [RawApertureFNumber] => 9.5100002288818 [FocusDistance] => 16.66m [RawFocusDistance] => 16.659999847412 [Orientation] => 1 [ExifVersion] => 0200)

Данная функция доступна, если подключена библиотека EXIF.

Для этого необходимо либо снять комментарий со строки ;extension=php_exif.dll в файле php.ini (должно быть extension=php_exif.dll), либо откомпилировать PHP с параметром —enable-exif.

Для работы этой функции библиотека GD не требуется.

imageInterlace

Установка черезстрочности.

Синтаксис:

int imageInterlace(int im [, int interlace])

Если в функции задан второй необязательный параметр interlace, и он равен 1, то рисунок im отображается черезстрочно, если равен 0, то последовательно.

Функция возвращает текущую установку черезстрочности.

gd_info

Возвращает информацию о библиотеке GD.

Синтаксис:

array gd_info(void)

Функция возвращает массив, содержащий версию и параметры установленной библиотеки GD.

<?php
$gd=gd_info();
echo "<pre>";
print_r($gd);
echo "</pre>";

?>

Приведенный пример выведет примерно следующее:

Array( [GD Version] => bundled (2.0.22 compatible) [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => [GIF Read Support] => 1 [GIF Create Support] => [JPG Support] => 1 [PNG Support] => 1 [WBMP Support] => 1 [XBM Support] => 1 [JIS-mapped Japanese Font Support] => )

image_type_to_mime_type

Возвращает Mime-Type типа изображения.

Синтаксис:

string image_type_to_mime_type( int imagetype)

Функция возвращает MIME-тип картинки, заданный константой в параметре imagetype.

<?php
header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));

?>

Список констант и возвращаемых значений функции image_type_to_mime_type():

Данная функция не требует наличия библиотеки GD.

wm-help.net

Установка библиотеки PHP GD2

Напоследок приведу краткий гайд по установке php GD на сервер.

Установить последнюю версию библиотеки можно с помощью следующих команд:

CentOS 6

   yum install php-gd  

SUSE

   yast -i php5_gd  

Ubuntu, Debian

   apt-get install php5-gd  

После установки не забудьте перезапустить Apache!

nexus-it.ru

Основы работы с библиотекой GD

От автора: очень часто при разработке скриптов необходимо работать с изображениями, используя язык 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(), которая выводит или сохраняет изображение, в зависимости от состояния второго параметра. Параметры передаваемые данной функции:

Теперь давайте посмотрим в браузере, что у нас получилось:

Gd php

Теперь, давайте посмотрим, как создать изображение, используя существующее. К примеру, исходное изображение имеет формат jpeg, значит для изображения формата jpeg, необходимо создать следующую функцию:

Функция imagecreatefromjpeg() — создает новое изображение из файла или URL (формата jpeg) и возвращает его дискриптор. Параметром необходимо передать путь к изображению. Если у Вас исходное изображение другого формата, то воспользуйтесь одной из следующих функций:

Далее определим ширину и высоту созданного пустого изображения:

Думаю, Вы уже догадались, что функция imagesx() – возвращает ширину выбранного изображения в пикселях. А функция imagesу() – высоту. Обеим функциям необходимо передать параметром дискриптор открытого изображения. Перед тем, как изобразить что то, на пустом изображении, необходимо определить цвет, при помощи которого мы будем отображать различные фигуры, текст и т.д. Для этого используется функция imagecolorallocate($im,$red,$green,$blue), которая создает цвета для изображений. При этом возвращает идентификатор цвета в соответствии с заданными RGB параметрами. То есть для каждого цвета, который Вы хотите определить, необходимо вызывать данную функцию. Параметрами необходимо передавать следующие значения:

Теперь давайте, определим несколько цветов:

Теперь давайте нарисуем закрашенный прямоугольник на пустом изображении. Для этого добавим следующий код:

Функция imagefilledrectangle() – рисует закрашенный прямоугольник, на выбранном изображении. Параметры, которые необходимо передать:

Давайте перейдем в браузер и посмотрим, что у нас получилось:

Gd php

Далее, давайте научимся рисовать окружности и дуги. Для этого используем функцию imagefilledarc():

Параметры, которые необходимо передать данной функции:

Давайте перейдем в браузер и посмотрим, что у нас получилось:

Gd php

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

Теперь на экране мы увидим смайлик:

Gd php

Далее, давайте посмотрим как отобразить на изображении первый символ произвольной строки. Для этого используем две аналогичные функции:

Функции imagechar() и imagecharup(), аналогичны по своей работе, только imagechar() – выводит символ по горизонтали, а imagecharup() – по вертикали. Параметры, которые необходимо передать данным функциям:

Теперь давайте посмотрим, каким образом можно исказить изображение. Для этого мы используем следующий код:

Итак, функция imageconvolution() — накладывает искривляющую матрицу на изображение, тем самым, искажая его нормальный вид. Параметры, которые необходимо передать данной функции:

Теперь давайте посмотрим, как применение последней функции, повлияет на изображение:

Gd php

Теперь научимся изображать многоугольники. Для этого используем функцию imagefilledpolygon(), которая изображает закрашенный многоугольник:

Параметры, которые необходимо передать данной функции:

Давайте посмотрим, что у нас получилось, при этом закомментируем строки, искажающее изображение:

Gd php

Вот мы с Вами изобразили многоугольник. Теперь давайте нарисуем простую линию. Для этого используем функцию imageline():

Функция imageline() – изображает прямую линию. Параметры, которые необходимо передать:

Давайте перейдем в браузер и посмотрим, что получилось:

Gd php

Как Вы видите линия успешно нарисована.

Копирование изображений

Теперь давайте научимся копировать и изменять размеры изображений. Так как у нас есть открытое изображение, я предлагаю скопировать его на наш рисунок который мы создаем в данном уроке. Для этого воспользуемся функцией imagecopy(), которая выполняет копирование изображений, как полностью так и по частям. Итак вызовем данную функцию:

Параметры которые необходимо передать данной функции:

Теперь давайте перейдем в браузер и посмотрим, что у нас получилось:

Gd php

Как Вы видите мы скопировали часть изображения. Теперь давайте не просто скопируем изображение, а как бы наложим одно на другое. Для этого мы используем функцию — imagecopymerge(), которая выполняет копирование изображения, всего или только его части, с наложением. По своей работе данная функция полностью аналогична предыдущей функции, и отличается только тем, что она принимает на один параметр больше (параметр pct). Который отвечает за наложение одного изображения на другое, и может варьироваться от 0 до 100. Когда pct = 0, наложения не происходит. В случае значения 100 эта функция ведет себя аналогично функции imagecopy(). Давайте вызовем данную функцию:

Зададим степень наложения 50% и давайте посмотрим, что получилось:

Gd php

В библиотеке GD есть еще одна аналогичная функция, которая выполняет копирование с наложением, за исключением того что копирование и наложение происходит в градациях серого. То есть копируемое изображение, будет наложено на исходное и будет черно-белым. Вот данная функция: imagecopymergegray(), передавать ей необходимо те же параметры, что и функции imagecopymerge().

И последняя функция, которую мы с Вам рассмотрим в данном разделе — это функция imagecopyresampled(), которая выполняет копирование изображений с масштабированием. Поэтому давайте вызовем данную функцию:

Параметры, которые необходимо передать данной функции:

Теперь давайте перейдем в браузер и посмотрим, что у нас получилось:

Gd php

Нанесение текста на изображение

Для нанесения текста на изображение, используем функцию imagettftext(), которая рисует текст на изображении шрифтом TrueType. Для данного урока я подготовил два TrueType шрифта и скопировал их в папку fonts. Теперь давайте вызовем данную функцию:

Параметры которые необходимо передать данной функции:

Теперь давайте перейдем в браузер и посмотрим, что у нас получилось:

Gd php

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

Всего Вам доброго, удачного кодирования! И увидимся в следующих уроках!!!

Gd php

webformyself.com

Testing GD support by Script

By using php code we can check GD support. For this we will be using function_exists and extension_loaded functions. Here is the code.

<?Php
if (extension_loaded(‘gd’)) {
echo "<br>GD support is loaded ";
}else{
echo "<br>GD support is NOT loaded ";
}
if(function_exists(‘gd_info’)){
echo "<br>GD function support is available ";
}else{
echo "<br>GD function support is NOT available ";
}
?>

Displaying GD support available

We can display the type of GD support available in PHP installation. We can see whether GIF support or any other support is available or not. Here is the code to display gd_info()

<?Php
$a=gd_info();
while (list ($key, $val) = each ($a)) {
echo "$key -> $val <br>";
}
?>

The output of above code is here.

GD Version -> bundled (2.1.0 compatible)
FreeType Support -> 1
FreeType Linkage -> with freetype
T1Lib Support ->
GIF Read Support -> 1
GIF Create Support -> 1
JPEG Support -> 1
PNG Support -> 1
WBMP Support -> 1
XPM Support -> 1
XBM Support -> 1
JIS-mapped Japanese Font Support ->

www.plus2net.com

Сборка

Для успешного выполнения примеров из этой статьи необходимо, чтобы 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:

Играй на официальном сайте play-vulcan.online и быстро получай деньги

phpwiki.ru


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Adblock
detector