Все ленты — последние статьи

Работа c графической библиотекой PHP GD library.

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

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

<?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, 0, 10, 160, $white, $font_path, $string);

//Сохраняем изображение

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

//Загружаем фоновое изображение
$image = imagecreatefrompng('calendar_blank.png');
$image_width = imagesx($image);

//Определяем цвет фона и шрифт
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
$font_path = 'advent_light';


//Указываем позиции текста
$pos_month = imagettfbbox(13, 0, $font_path, $month);
$pos_day = imagettfbbox(25, 0, $font_path, $day);
$pos_year = 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.

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

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

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

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

//проверяем, установлено ли исходное изображение
if(isset($_GET['source'])){
//выполняем базовую обработку рисунка
$image = filter_var($_GET['source'], FILTER_SANITIZE_STRING);

//Загружаем изображение
$image = imagecreatefromjpeg($image);

//Переводим его в черно-белый режим
imagefilter($image, IMG_FILTER_GRAYSCALE);

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

//Сохраняем изображение в качестве 90%
imagejpeg($image, '', 90);

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

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

Ставим в «источник» любую картинку, и вскоре она станет черно-белой. Тем, кто планирует использовать эту функцию на общедоступных серверах, потребуются дополнительные меры безопасности. Хотя в вышеприведенном скрипте указано изображение типа .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 и свои творческие способности и обязательно расскажите мне, что у вас получилось!

Работа c графической библиотекой PHP GD library. Часть вторая.

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

Что касается примеров приведенных ниже, то мы начнем с простого и постепенно будем переходить к более сложным моментам и в конечном счете доберемся до действительно интересной функции, которая называется gradient, производящей плавный переход цветов! Все коды будут не только сопровождаться пояснениями по ходу, но и отдельно детально рассмотрены. Так что вы запросто сможете применить любой из них в своих проектах.
demo

По ссылке можно скачать все примеры из урока.

Наша подопытная картинка :)

Как можно учиться редактировать и видоизменять изображение не имея хоть какой-нибудь картинки для работы. Поэтому прошу любить и жаловать вот такую картинку:

1. Подсчитаем количество использованных цветов

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

// Создаем пример изображения
$im = imagecreatefromgif('PHP.gif');

echo 'Total colors in image: ' . imagecolorstotal($im);//Опа! Я же сказал, что это необыкновенно просто!

// очищаем память
imagedestroy($im);

Довольно просто и всегда можно воспользоваться….

2. Сделаем котика рельефным!

Про этот прием я забыл рассказать в первой части, и чтобы немного оправдать себя, расскажу о нем в этом уроке. Многие талантливые веб-дизайнеры закричат, что тиснение может запросто выполнить любой, у кого есть PhotoShop. А вот сколько человек может сказать, что они умеют делать рельефное тиснение, используя только PHP и изображение в первоначальном виде? ВЫ можете, вот кто! Помните нашего доброго маленького друга, функцию imagefilter. Нам достаточно задать в ней параметр emboss и затем смотреть что вышло.

header('content-type: image/jpeg');
$image = imagecreatefromjpeg('guido_the_kitten.jpg');
imagefilter($image, IMG_FILTER_EMBOSS);//Изображение оттеснено
imagejpeg($image, '', 90);
imagedestroy($image);

О, да! Мило, не так ли? Конечно. Конечно, это не самая чудесная вещь в мире, но тиснение все-таки произведено и сравнительно быстро. А для тех, кто чувствует себя более уверено в PHP и разбирается в математике, сообщаю, вы можете воспользоваться функцией imageconvolution, которая обеспечит больший контроль над результатом. Хотите срочно посмотреть как это будет выглядеть на котике? Вуаля!

image = imagecreatefromjpeg('guido_the_kitten.jpg');
$emboss = array(array(4, 0, 0), array(0, -2, 0), array(0, 0, -2));
imageconvolution($image, $emboss, 1, 200);

header('Content-Type: image/jpeg');
imagejpeg($image, null, 100);

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

3. Добавим водяной знак к картинке с котиком

Так как мы вовсе не хотим, чтобы нашего милого котика любой мог скачать и выдать за своего, нужно его защитить. Один из способов помешать краже изображения это добавить изображению серверный водяной знак. Для этого нам потребуются: во-первых, само изображение, в данном случае это котик, а во-вторых, изображение самого водяного знака. В качестве водяного знака я выбрал простенькое прозрачное изображение в формате .gif с названием сайта. Теперь нам нужно поместить водяной знак на изображение. В добавок, нам хочется настроить степень прозрачности, отступы и расположение водяного знака относительно изображения. Создается впечатление большого объема работы? Но это не так!

ini_set("display_errors", "1");
error_reporting(E_ALL);

//Настраиваем основные переменные и размещение
$image_src = 'guido_the_kitten.jpg';
$watermark_src = 'watermark.gif';
$opacity = 30;
$padding = 20;

//Загружаем изображения
$image = imagecreatefromjpeg($image_src);
$watermark = imagecreatefromgif($watermark_src);

//Введем и сохраним высоту и ширину наших изображений

list($image_width, $image_height) = getimagesize($image_src);
list($watermark_width, $watermark_height) = getimagesize($watermark_src);

//Установим окончательную позицию водного знака в зависимости от отступов и размера
$final_x = $image_width — $watermark_width — $padding;
$final_y = $image_height — $watermark_height — $padding;

//Скопируем наш водный знак на оригинальное изображение
imagecopymerge($image, $watermark, $final_x, $final_y, 0, 0, $watermark_width, $watermark_height, $opacity);

//Настраиваем элемент header, выводим изображение, очищаем память
header("Content-type: image/jpeg");
imagejpeg($image, null, 100);
imagedestroy($image);
imagedestroy($watermark);

Пояснения:

• Установите ряд базисных переменных и местоположение изображения, на примере того, как я разместил водяной знак относительно основного изображения.
• Настройте желаемую степень прозрачности и размеры отступов для водяного знака.
• Загрузка изображения с помощью функции imagecreatefrom*.
• Сохраните исходную ширину и высоту самого изображения и водяного знака. Обратите внимание, как использование функции list уменьшает объем вводимых кодовых знаков. Это получается благодаря элементу getimagesize, он один вмещает в себе все те значения, которые нам пришлось бы вводить.
• Рассчитайте окончательное положение водяного знака.
• Скопируйте водяной знак на изображение, перечислив все настроенные ранее параметры.
• Затем необходимо прописать header, вывести получившееся в итоге изображение и очистить память
Вы, наверняка, заметили, что в функции imagejpeg у второго параметра стоит значение null. Здесь такое значение, потому что мы просто выводим изображение с водяным знаком в браузер, а не сохраняем его. Если вам понадобится сохранить его, просто замените этот параметр указанием нового названия пиктограммы (более детально о сохранении полученных изображений расскажу чуть позже). Ну, вроде бы все рассказал, итак у нас должна была получиться вот такая картинка:

4. Представим котика в виде пиктограммы!

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

ini_set("display_errors", "1");
error_reporting(E_ALL);

$img_src = 'guido_the_kitten.jpg';
//Требуемая ширина пиктограммы
$width = 125;

//Подтверждаем, что изображение существует
if(file_exists($img_src)){
//выводим изображение
$image = imagecreatefromjpeg($img_src);

//Проверяем данные о ширине и высоте и сохраняем их
list($image_width, $image_height) = getimagesize($img_src);


//Высчитываем новую высоту, сохраняя пропорциональность
$height = (($width / $image_width) * $image_height);

//производим повторную выборку и изменяем размер изображения
$tmp_img = imagecreatetruecolor($width, $height);
imagecopyresampled($tmp_img, $image, 0, 0, 0, 0, $width, $height, $image_width, $image_height);

//Указываем в элементе header тип контента и выводим изображение в браузер
header('Content-type: image/jpeg');
imagejpeg($tmp_img, null, 100);

//Очищаем память
imagedestroy($tmp_img);
imagedestroy($image);
}
else {
echo 'File not found!';
}

Пояснения:

• Как обычно, подключаем функцию отчета об ошибках, затем задаем значения ряду основных переменных, к примеру, указываем требуемую ширину пиктограммы (в нашем случае — 125 пикселей).
• Устанавливаем запрос о существовании файла на сервере, при его отсутствие, будет выводиться сообщение об ошибке
• Выводим изображение с помощью imagecreatefromjpeg
• Сохраняем информацию о подлинной ширине и длине изображения, прописывая соответствующие переменные
• Так как мы хотим сохранить пропорциональность изображения, то необходимо вычислить новое значение высоты, основываясь на соотношение сторон, ширину, как вы помните, мы уже задали (125пикселей). Итак, делим заданную ширину на подлинную ширину изображения, полученный результат умножаем на подлинную высоту. Только все это за вас выполняет код.
• Производим повторную выборку и изменяем размер изображения, я думаю, описанные выше действия отлично поясняют этот пункт.
• Указываем тип контента с помощью элемента header, выводим только что созданную пиктограмму и очищаем память.

Вуаля! Принимайте работу!
Вот что у вас должно было получиться :)

Все прекрасно работает, и наше изображение выводится из скрипта прямиком в браузер. А Вот как бы его сохранить?

5. Сохраним пиктограмму!

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

ini_set("display_errors", "1");
error_reporting(E_ALL);

$img_src = 'guido_the_kitten.jpg';
//Желаемая ширина пиктограммы
$width = 125;
//Имя пиктограммы
$thumb = 'kitten_thumbnail.jpg';

// Подтверждаем, что изображение существует if(file_exists($img_src)){
//Вывод изображения
$image = imagecreatefromjpeg($img_src);

// Проверяем данные о ширине и высоте и сохраняем их
list($image_width, $image_height) = getimagesize($img_src);

// Высчитываем новую высоту, сохраняя пропорциональность
$height = (($width / $image_width) * $image_height);

// производим повторную выборку и изменяем размер изображения
$tmp_img = imagecreatetruecolor($width, $height);

imagecopyresampled($tmp_img, $image, 0, 0, 0, 0, $width, $height, $image_width, $image_height);

//Пытаемся сохранить новую пиктограмму
if(is_writeable(dirname($thumb))){
imagejpeg($tmp_img, $thumb, 100);
echo 'Thumbnail saved as ' , $thumb;
}
else {
echo 'Unable to save thumbnail, please check file and directory permissions.';
}

// Очищаем память
imagedestroy($tmp_img);
imagedestroy($image);
}

else {
echo 'File not found!';
}

Часть кода вам знакома, обратите внимание, что имя пиктограммы мы указываем практически в самом начале скрипт-кода, но всю работу выполняет часть кода с комментарием ‘’Пытаемся сохранить новую пиктограмму’’. Остается, только убедиться, что у пиктограммы правильное разрешение; если все соответствует требованиям, сообщение сохраняется под именем ‘kitten_thumbnail.jpg’ и программа выдает сообщение об успешном выполнении действия. Итак, вам пора бы проверить свои серверы и удостовериться, что пиктограмма сохранена!

А теперь небольшой Бонус!

Это забавный PHP скрипт-сценарий, который разложит цвета в виде градиента, с указанием шага между одним цветом градиента и последующим.

*Gradient function by http://codingforums.com/showthread.PHP?t=79463 Огромное спасибо пользователю "Jak-s".

*@param int steps — количество шагов (или длина)градиента

*/
ini_set("display_errors", "1");
error_reporting(E_ALL);

function gradient($hexstart, $hexend, $steps) {

//См. дополнительную информацию на http://us2.PHP.net/manual/en/function.hexdec.PHP

$end['b'] = hexdec(substr($hexend, 4, 2));

//Высчитываем шаг каждого цветового кода
$step['r'] = ($start['r'] — $end['r']) / ($steps — 1);

$step['g'] = ($start['g'] — $end['g']) / ($steps — 1);
$step['b'] = ($start['b'] — $end['b']) / ($steps — 1);

$gradient = array();

///Закрепим каждый цвет в зависимости от шага (Loop through each color depending on steps)
for($i = 0; $i <= $steps; $i++) {

$rgb['r'] = floor($start['r'] — ($step['r'] * $i));
$rgb['g'] = floor($start['g'] — ($step['g'] * $i));
$rgb['b'] = floor($start['b'] — ($step['b'] * $i));

$hex['r'] = sprintf('%02x', ($rgb['r']));
$hex['g'] = sprintf('%02x', ($rgb['g']));
$hex['b'] = sprintf('%02x', ($rgb['b']));

$gradient[] = implode(NULL, $hex);

}

return $gradient;

}

/**
*Образец использования с большим количеством тегов div

*Но не вздумайте размещать подобное на сайтах клиентов ;-)
*/
$gradient = gradient('4096EE', 'C3D9FF', 50);

foreach($gradient as $color){
echo '<div style="background-color:'.$color.';">&nbsp;</div>';
}

Вперед! Проверьте скрипт-сценарий в браузере, это забавно, я обещаю! Полюбопытствуйте, возможно, вам понравится!

Очень надеюсь, что после этих двух уроков вы имеете представление о возможностях графической библиотеки GD library и даже можете воспользоваться рядом отличных приемов.

Особая благодарность объявляется котенку, который предоставил нам свое фото для работы :))))