Перейти к основному содержимому

Изображения

Обзор

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

Для площадок ВК и ОК используются внутренние хостинги, но изображение будет доступно и в панели GamePush. По умолчанию загрузка изображений игроками запрещена. Вы можете включить её с помощью переключателя Разрешать игрокам загружать изображения:

tip

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

Платформа Вконтакте

tip

Все изображения загружаются на платформу к игроку в альбом с названием игры.

При первой загрузке изображения, у игрока будут запрошены необходимые права.

Дополнительных действий со стороны разработчика не требуется.

Платформа Одноклассники

tip

Все изображения загружаются на платформу к игроку в альбом с названием игры.

Для того, чтобы использовать загрузку картинок в Одноклассниках, необходимо:

  1. Зайти в настройки платформы в GamePush и в поле Public Key указать публичный ключ игры. Он обязателен для работы с API Одноклассников.
  2. Зайти в настройки игры в Одноклассниках и в разделе "Права доступа" и выставить права доступа "Изменение фотографий и фотоальбомов (PHOTO_CONTENT)" в значение "Опционально".

При первой загрузке изображения, у игрока будут запрошены необходимые права.

Загрузить изображение

+1 Request

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

/**
* @type {File} file - нужный файл с изображением
*/
gp.images.upload({ file: myFile });

Однако, не многие игровые движки дают возможность работать с JavaScript и DOM API напрямую.

Поэтому, если не передать файл - откроется окно выбора файла с типом изображений (jpeg/png).

Затем изображение будет загружено на сервер.

gp.images.upload();

При загрузке вы можете разметить изображение тегами. Дополнительно изображению присваивается тег UGC.

gp.images.upload({
tags: [
'screenshot',
'level7',
'valentinesday',
]
});

События загрузки

// Изображение успешно загружено
gp.images.on('upload', (image) => {});

/**
* Во время загрузки произошла ошибка
* @type {
* 'player_not_found' - аккаунт игрока еще не был создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный сайт
* 'access_not_granted' - игрок на площадке не дал разрешение
* 'not_permitted' - запрещено загружать изображения
* 'internal_error' - что-то пошло не так
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.images.on('error:upload', (error) => {});

Загрузить по URL

+1 Request

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

/**
* @type {string} url - нужный URL изображения
*/
gp.images.uploadUrl({ url: 'https://gamepush.com/img/ogimage.png' });

Метод по большей части нужен для загрузки скриншотов и графики через blob и Base64 Data URI.

Игровые движки позволяют сохранять скриншот холста и возвращают blob ссылку или Data URI. Вы можете вставить их в поле url и загрузить картинку на сервер.

// загрузка blob
gp.images.uploadUrl({ url: 'blob:https://example.com/123e4567-e89b-12d3-a456-426614174000' });

// загрузка base64 data URI
gp.images.uploadUrl({ url: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4...' });

При загрузке вы можете разметить изображение тегами. Дополнительно изображению присваивается тег UGC.

gp.images.uploadUrl({
url: 'https://gamepush.com/img/ogimage.png',
tags: [
'screenshot',
'level7',
'valentinesday',
]
});

События загрузки

// Изображение успешно загружено
gp.images.on('upload', (image) => {});

/**
* Во время загрузки произошла ошибка
* @type {
* 'empty_url' - не указан URL изображения
* 'player_not_found' - аккаунт игрока еще не был создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный сайт
* 'permission_not_allowed_by_user' - игрок на площадке не дал разрешение (клиент)
* 'access_not_granted' - игра не получила доступ к изображениям игрока (сервер)
* 'not_permitted' - запрещено загружать изображения
* 'internal_error' - что-то пошло не так
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.images.on('error:upload', (error) => {});

Выбрать файл

FREE

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

const result = await gp.images.chooseFile();

const {
/**
* Файл изображения
* @type {File}
*/
file,
/**
* Временная ссылка на изображение
* (доступна только с текущего браузера)
* @type {string}
*/
tempUrl
} = result;

В последствии вы можете загрузить эту ссылку или файл на сервер:

const { file, tempUrl } = await gp.images.chooseFile();

// файл
gp.images.upload({ file });
// временная ссылка
gp.images.uploadUrl({ url: tempUrl });

События выбора файла:

// Файл выбран
gp.images.on('choose', (result) => {});

/**
* Во время выбора возникла ошибка
* @type {
* 'cancelled' - окно выбора было закрыто
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.images.on('error:choose', (error) => {});

Получение изображений

+1 Request

Получить изображения отсортированные по новизне:

const result = await gp.images.fetch();

const {
/**
* Массив изображений
* @type {ImageInfo[]}
*/
items,
/**
* Проверка на возможность подгрузить еще
* @type {boolean}
*/
canLoadMore
} = result;

Получить изображения из специальной коллекции по тегу. Набор тегов ищет через AND: если указать теги screenshot и valentinesday - будут найдены изображения у которых есть оба этих тега:

gp.images.fetch({
tags: ['screenshot', 'valentinesday']
});

Получить изображения созданные определенным игроком:

// собственные изображения
gp.images.fetch({ playerId: gp.player.id });

// другой игрок
gp.images.fetch({ playerId: 16977410 });

Получить определенное количество изображений за раз с нужным смещением:

// Первые 100 изображений
gp.images.fetch({
limit: 100,
offset: 0,
});

// Изображения со 101 по 200
gp.images.fetch({
limit: 100,
offset: 100,
});

События получения изображений

// Успешное получение
gp.images.on('fetch', (result) => {});

/**
* Ошибка при получении
* @type {
* 'player_not_found' - аккаунт игрока еще не был создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный сайт
* 'internal_error' - что-то пошло не так
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.images.on('error:fetch', (error) => {});

Подгрузить еще

+1 Request

Загрузить следующую партию изображений с нужными настройками:

// поведение по умолчанию
const result = await gp.images.fetchMore();

const {
/**
* Массив изображений
* @type {ImageInfo[]}
*/
items,
/**
* Проверка на возможность подгрузить еще
* @type {boolean}
*/
canLoadMore
} = result;

// следующая партия с тегом screenshot,
// только загруженных моим игроком,
// загружать по 10 штук
gp.images.fetchMore({
tags: ['screenshot'],
playerId: gp.player.id,
limit: 10
});

События подгрузки

// Успешная подгрузка
gp.images.on('fetchMore', (result) => {});

/**
* Ошибка при подгрузке
* @type {
* 'player_not_found' - аккаунт игрока еще не был создан
* 'project_not_found' - не совпал ID игры или игра не существует
* 'origin_not_allowed' - запрещенный сайт
* 'internal_error' - что-то пошло не так
* другое - любая ошибка не связанная с сервисом
* }
*/
gp.images.on('error:fetchMore', (error) => {});

Изменение размеров

FREE

Для ссылок изображений размещенных в GamePush вы можете запрашивать любые размеры изображения и оно будет трансформировано.

const url = 'https://cdn.eponesh.com/static/images/97d/ddb/97dddbe1cde68de40bf637349b31f44a.webp';
const url128x128 = gp.images.resize(
// ссылка на изображение
url,
// требуемая ширина
128,
// требуемая высота
128,
// true - обрезать по размеру
// false - изменить размеры без обрезки
true,
);

// https://cdn.eponesh.com/static/128x128/images/97d/ddb/97dddbe1cde68de40bf637349b31f44a.webp
gp.player.avatar = url128x128;

Скачать изображение в Unity

// объект Image
Image imageUI;
// ссылка на изображение
string imageUrl = "https://cdn.eponesh.com/static/images/97d/ddb/97dddbe1cde68de40bf637349b31f44a.webp";

public async void SetImage()
{
// форматирование ссылки под формат png
string url = GP_Images.FormatToPng(_inputUrl.text);
// скачивание и установка изображения
await GP_Utility.DownloadImageAsync(url, imageUI);
}

Поля изображения

FieldTypeDescriptionExample
idstringID Изображения65fab46354099139179953f5
playerIdnumberID Игрока, опубликовавшего изображение или 016977410
srcstringСсылкаhttps://gamepush.com/img/ogimage.png
widthnumberОригинальная ширина256
heightnumberОригинальная высота256
tagsstring[]Массив тегов['screenshot', 'level7', 'valentinesday']

Оставайтесь на связи

С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.

Сообщество GamePush в Telegram: @gs_community.

Для ваших обращений e-mail: [email protected]

Желаем вам успехов!