На многих популярных интернет-ресурсах используются динамические изображения (сигнатуры, графики и просто генерированные изображения). В этой статье мы разберём, как же их правильно создавать. Мы создадим не просто php изображение, а подключим к нему GET запрос. Для начала создадим обычный PHP файл и добавим к нему header типа png.
<?php header ("Content-type: image/png"); ?>
Далее обозначим главный холст $im
$HeightImage = 100; $WidthImage = 468; $im = imagecreatetruecolor ($WidthImage, $HeightImage) or die('Error'); imagefill($im, 0, 0, 0xFFFFFF); ImagePng ($im); imagedestroy($im);
Из кода видно, что $im будет главным фоном, также цвет белым (0xFFFFFF). Нужно помнить, что цвет при создании фона записывается с указание 0x, без этого у вас код работать не будет, а будет отображаться ошибка.
Здесь нет возможности вписывать каждый текст в виде #FFFFFF, поэтому используют ImageColorAllocate. Пример использования:
$ColorBlack = ImageColorAllocate ($im, 0, 0, 0); // черный
Как ранее упоминалось, мы будем присваивать нашему изображению на PHP уникальный параметр. Назовём его $name — вводим логин пользователя. На этом этапе нужно определиться, как мы будем получать данные с сервера. Самый легкий путь — это json запрос. А раз это небольшой урок, то получать информацию будем с twitch.tv. Адрес запроса будет примерно такой https://api.twitch.tv/kraken/channels/$name. Давайте разберём в коде.
$name = $_GET['name']'; $json_array = json_decode(file_get_contents('https://api.twitch.tv/kraken/channels/'.$name)); if ($json_array->error != 'Not Found') { $game = $json_array->game; $display_name = $json_array->display_name; $status = $json_array->status; } else { echo 'Пользователь не найден!'; }
Как видно в коде, мы будем проверять, есть ли данный пользователь и, если он есть, выводим данные о канале. Теперь вернёмся к изображению и набросаем небольшой код. Если что-то будет непонятно, пишите в комментариях я попытаюсь всё объяснить. Как обрезать изображение на PHP можно узнать, перейдя по ссылке.
<?php /* START Работа с программной частью*/ $name = $_GET['name']; $json_array = json_decode(file_get_contents('https://api.twitch.tv/kraken/channels/'.$name)); if ($json_array->error != 'Not Found') { $game = $json_array->game; $display_name = $json_array->display_name; $status = $json_array->status; /* START Работа с изображением*/ header ("Content-type: image/png"); $HeightImage = 100; $WidthImage = 468; $font = 'ARICYR.ttf'; $logo = imagecreatefrompng ('http://syscoding.ru/source/image/logo1.png'); $im = imagecreatetruecolor ($WidthImage, $HeightImage) or die('Error'); imagefill($im, 0, 0, 0xFFFFFF); $ColorWhite = ImageColorAllocate ($im, 255, 255, 255); $ColorBlack = ImageColorAllocate ($im, 0, 0, 0); $ColorGray1 = ImageColorAllocate ($im, 49, 49, 39); $ColorGray2 = ImageColorAllocate ($im, 163, 157, 139); $ColorRed = ImageColorAllocate ($im, 184, 41, 41); imagefilledrectangle($im, 468, 19, 0, 28,$ColorGray1); imagefilledrectangle($im, 468, 28, 0, 31,$ColorGray2); imagettftext ($im, 12, 0, 3, 15, $ColorRed, $font, $display_name.' ['.$game.']'); imagettftext ($im, 9, 0, 103, 60, $ColorBlack, $font, 'Переменная: %.%'); imagettftext ($im, 9, 0, 103, 71, $ColorBlack, $font, 'Переменная: %.%'); imagettftext ($im, 9, 0, 103, 82, $ColorBlack, $font, 'Переменная: %.%'); imagettftext ($im, 9, 0, 103, 93, $ColorBlack, $font, 'Переменная: %.%'); imagettftext ($im, 9, 0, 303, 60, $ColorBlack, $font, 'Переменная: %.%'); imagettftext ($im, 9, 0, 303, 71, $ColorBlack, $font, 'Переменная: %.%'); imagettftext ($im, 9, 0, 303, 82, $ColorBlack, $font, 'Переменная: %.%'); imagettftext ($im, 9, 0, 303, 93, $ColorBlack, $font, 'Переменная: %.%'); imagettftext($im, 9, 90, 465, 101, $ColorBlack, $font, 'syscoding.ru'); imagealphablending($logo, false); imagesavealpha($logo, true); imagecopy($im, $logo, 0, 33, 0, 0, imagesx($logo), imagesy($logo)); ImagePng ($im); imagedestroy($im); imagedestroy($logo); } else { echo 'User Not Found'; } ?>
Результат можно посмотреть, перейдя по ссылке.
Конечно, можно было бы создать условие и выводить логотип для каждой игры свой, но, я думаю, это сделать легко, и вы осилите это сами. Исходника не будет, так как весь файл предоставлен на сайте. В следующем уроке мы разберем авторизацию на DLE при помощи PHP. Желаю удачных проектов!
Материал о динамических изображениях средствами PHP будет полезен для тех, кто занимается разработками своей CMS на PHP.