В гугле на эту тему находятся в основном сервисы по созданию динамических обложек для вк. А вот каких-либо статей на эту тему не очень много, а годных и того меньше.
Кстати, если вы ищете именно сервис по созданию динамических обложек для группы ВКонтакте, вы можете заказать обложку у нас. По вашему дизайну, с любым функционалом. Всё в лучшем виде. Просто напишите нам здесь или в нашей группе ВКонтакте.
В этой статье я попробую осветить именно тему создания таких обложек. Попробуем сделать так, чтобы на ней светилась текущая дата.
Загрузка обложки для группы в вк может показаться по началу немного сложной. На самом деле это не так.
Весь процесс выглядит вот так:
1. Используя метод photos.getOwnerCoverPhotoUploadServer отправляем id группы и координаты по которым нужно обрезать изображение. Пока без самого изображения. Чтобы не отправлять эти координаты, можно просто создать картинку размером 795х200. Что я и сделаю в этой статье. Этот метод вернёт ссылку по которой мы будем грузить нашу обложку.
2. Отправляем картинку в посте на полученную в первом пункте ссылку. Тут нет никаких замутов. В ответ мы получим параметры hash и photo.
3. Всё, наша картинка загружена. Просто пока что не стоит. Чтобы её поставить, нужно воспользоваться методом photos.saveOwnerCoverPhoto, сюда нужно передать просто полученные чуть ранее hash и photo.
4. Наслаждаемся картинкой на обложке группы.
5. ????
6. Profit!!!11
Нам потребуется создать файлы fon.php и vk.class.php, а так же скачать нужным нам шрифт в расширении .ttf, достать картинку 795х200 (пусть будет fon-orig.jpg) и всё это положить рядом со скриптами. Так же поставить на крон вызов fon.php в 00:00.
Мы для примера просто напишем на обложке какой сегодня день.
Код максимально простой для понимания. Без обработки ошибок или ещё чего-то. Имейте ввиду. Для серьёзного проекта его придётся изменять.
Содержимое fon.php:
<?php
$month = date('n'); //Получаем порядковый номер текущего месяца
$months = array('января', 'февраля', 'марта', 'апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'); //Создаём массив с месяцами на русском
$current_date = 'Сегодня ' . date('d ' . $months[$month - 1] . ' Y') . ' года'; //Получаем в переменную текущую дату
$image = imageCreateFromJpeg('fon-orig.jpg'); //получаем изображение, обложку из файла
$white = imagecolorallocate($image, 255, 255, 255); //Добавляем в палитру белый цвет. Мой текст будет именно белым
$font = __DIR__ . '/OpenSans-Regular.ttf'; //Шрифт
$center = 398; //Середина изображения, т.к. полное изображение 795 пикселей. Ну тип 795 / 2 = 398 и 1 в остатке, но это не критично
$ttf_box = imagettfbbox(20, 0, $font, $current_date); //ширина текста
//В строчке выше
//20 - это размер текста
//0 - это угол наклона текста
//Ну и последние параметры это шрифт и текст
$position = $center - round(($ttf_box[2]-$ttf_box[0])/2); //Место, откуда нужно будет начать писать текст чтобы тот оказался посередине
//Пишем тот самый текст
imagefttext($image, 20, 0, $position, 27, $white, $font, $current_date);
imagejpeg($image, 'fon.jpg', 100); //Сохраняем полученную картинку в fon.jpg в 100% качестве
imagedestroy($image); //Освобождаем
include_once ('vk.class.php'); //Подключаем наш vk.class.php
//Сразу и создадим этот класс, который будет написан чуть позже
//Сюда пишем ключ апи созданный для группы в вк
$vk = new vk('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
$url = $vk->PhotoUploadServer(ИД ГРУППЫ); //Вставляем ид группы в эту функцию
$photo = $vk->UploadPhoto($url['upload_url'], 'fon.jpg'); //Вставляем изображение, которое нужно отправить
$result = $vk->SavePhoto($photo['hash'], $photo['photo']); //Вставляем в обложку загруженную картинку
echo "ok";
Содержимое vk.class.php:
<?php
//Задаём класс
class VK {
public $token = ''; //Создаём публичную переменную для токена, который нужно отправлять каждый раз при использовании апи вк
public function __construct($token) {
$this->token = $token; //Забиваем в переменную токен при конструкте класса
}
public function PhotoUploadServer($group_id) {
//Заполняем массив $data инфой, которую мы через api отправим до вк. О функции api "getOwnerCoverPhotoUploadServer" можно почитать в официальной документации вк
$data = array(
'group_id' => $group_id,
'v' => '5.71', //Версия API VK. Узнать нужную можно через официальную документацию вк
);
//Получаем ответ через функцию отправки до апи, которую создадим ниже
$out = $this->request('https://api.vk.com/method/photos.getOwnerCoverPhotoUploadServer', $data);
//И пусть функция вернёт ответ
return $out['response'];
}
public function UploadPhoto($url, $file) {
$data = array(
'photo' => new CURLFile($file), //Отправляем нашу обложку на сервера вк
);
//Получаем ответ через функцию отправки до апи, которую создадим ниже
$out = $this->request($url, $data);
//И пусть функция вернёт ответ
return $out;
}
public function SavePhoto($hash, $photo) {
$data = array(
'hash' => $hash,
'photo' => $photo,
'v' => '5.71', //Версия API VK. Узнать нужную можно через официальную документацию вк
);
//Получаем ответ через функцию отправки до апи, которую создадим ниже
$out = $this->request('https://api.vk.com/method/photos.saveOwnerCoverPhoto', $data);
//И пусть функция вернёт ответ
return $out;
}
public function request($url, $data = array()) {
$curl = curl_init(); //мутим курл-мурл в переменную. Для отправки предпочтительнее использовать курл, но можно и через file_get_contents если сервер не поддерживает
$data['access_token'] = $this->token; //токен, который нужно отправить вместе с запросом тоже нужно добавить в дату
curl_setopt($curl, CURLOPT_URL, $url); //Сюда забивается ссылка, куда отправить $data
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); //Отправляем через POST
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); //Сами данные отправляемые
$out = json_decode(curl_exec($curl), true); //Получаем результат выполнения, который сразу расшифровываем из JSON'a в массив для удобства
curl_close($curl); //Закрываем курл
return $out; //Отправляем ответ в виде массива
}
}
Выглядеть это будет примерно как в нашей группе в вк. Или на сплеш-арте в начале статьи.
Пс, вы можете заказать максимально сложные обложки для своей группы ВКонтакте у нас, через пункт "Работа" вверху сайта, или же через нашу группу ВКонтакте.
