Включаем функцию скриншота в виртуальные туры Pano2VR (+ компонент)

 Работа в Pano2VR | Веб-кодинг в Pano2VR, Создание VR-панорам и виртуальных туров, Редактор оформления (Skin editor)
 09.02.2023    11:45    1.1k    02.11.2023
 Время на чтение: ...    Комментировать    Напечатать
Содержание статьи
 Пользователи Pano2VR

В своем сообществе ВКонтакте работает чат, созданный специально для пользователей конвертера панорамных изображений Pano2VR. В нем мы решаем проблемы, возникающие в работе с Pano2VR, обмениваемся опытом и просто общаемся.

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

Включаем функцию скриншота в виртуальные туры Pano2VR (+ компонент)

Изображение

Подводка

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

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

Окно с изображением скриншота текущего вида панорамы.

Функционал, реализованный на моем сайте предоставляет пользователю возможность предварительного просмотра с сохранением изображения с помощью пункта контекстного меню «Сохранить картинку как…» или копирования в буфер обмена с помощью пункта «Копировать картинку». Кроме этого функция сохранения изображения продублирована с помощью кнопки «Сохранить изображение» пользовательского интерфейса.

Так реализовано у меня. Вы можете сделать иначе. Приведу только основные моменты, касающиеся создания скриншотов.

Создание изображения с помощью метода canvas.toDataURL()

Для захвата изображения понадобится следующая строка кода на JavaScript.

var imageDataURL = pano.getWebGlContext().canvas.toDataURL("image/jpeg", 1.0);

Данная строка кода получает контекст рендеринга WebGL и кодирует изображение элемента canvas в представление base64. Её результатом является строка, которая может быть использована в качестве значения атрибута src элемента img. Объясню её составляющие.

  • var imageDataURL
    – переменная, в которую будет записан результат;
  • pano
    – экземпляр объекта создаваемый в результате вызова
    pano = new pano2vrPlayer();
    (см. исходный код index.html);
  • getWebGlContext()
    – метод получения контекста рендеринга WebGL;
  • canvas
    – свойство, содержащее ссылку на объект canvas (холст) веб-интерфейса HTMLCanvasElement, связанный с контекстом;
  • toDataURL()
    – метод объекта canvas (холста) веб-интерфейса HTMLCanvasElement, возвращающий URL-адрес, содержащий представление изображения в кодировке base64, например
    data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNby

Метод toDataURL() имеет два необязательных параметра:

  • type – строка, задающая формат изображения в стандарте MIME: image/png, image/jpeg, image/webp. По умолчанию – image/png;
  • encoderOptions – число между 0 и 1, указывающее качество изображения для форматов, использующих сжатие с потерями, таких как image/jpeg и image/webp. По умолчанию – 0.92.

Модификация вызова pano2vrPlayer()

Попытка выполнить код приведет к тому, что вместо скриншота получится пустое черное изображение. Дело в том, что по соображениям производительности и совместимости браузер по умолчанию очищает буфер рисования холста WebGL после отрисовки на нем. Чтобы этого не происходило, необходимо изменить вызов pano2vrPlayer() в исходном коде index.html, добавив параметр preserveDrawingBuffer со значением true.

// create the panorama player with the container
pano = new pano2vrPlayer("container", { webGLFlags: { preserveDrawingBuffer:true } });

Компонент

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

Внешний вид составляющих компонента pano_screenshot.ggskc.

Для того, чтобы не править исходный код файла index.html после каждого экспорта внесите изменение, о котором описывалось в предыдущем разделе статьи, в исходный код шаблон html5 с названием normal.ggt, сделав его копию. Я уже позаботился о вас и сделал шаблоны для версий Pano2VR 6 и 7. Вам остается только скачать по ссылке внизу и скопировать файлы из архива в каталог шаблонов. Путь каталогу шаблонов вы можете узнать в настройках – опция HTML Template Directory.

Настройки программы: пути к файлам и папкам.

Компонент имеет три текстовых поля:

  • caption – заголовок окна;
  • ss_object – в это поле будет помещен HTML-код изображения для предварительного просмотра;
  • btn_save_ss – в это поле будет помещен HTML-код ссылки на скачивание изображения.

Захват скриншота и показ окна предварительного просмотра происходит по нажатию кнопки btn_create_ss. Для этого в сценариях для кнопки добавлен обработчик события Mouse Click с вызовом JavaScript-кода в действии Go to URL. Код выглядит следующим образом.

javascript:"";
//Имя файла для использования в диалоговом окне сохранения
var imageFileName = 'screenshot-image-' + window.location.pathname.substring(1) + '.jpg';

//Base64-кодированное изображение скриншота
var imageDataURL = pano.getWebGlContext().canvas.toDataURL("image/jpeg", 1.0);

//Вставка HTML-кода в поле ss_object
me._ss_object__text.innerHTML="<img id='panorama-screenshot' width='600' src='" + imageDataURL + "' />";

//Вставка HTML-кода в поле btn_save_ss
me._btn_save_ss__text.innerHTML="<a id='download-image' download onclick='this.download = &apos;" + 
imageFileName + "&apos;;this.href = &apos;" + imageDataURL.replace('image/jpeg', 'image/octet-stream') + 
"&apos;;' style='text-decoration: none; cursor: pointer; padding: 10px; font-size: small;'>Сохранить изображение</a>";

Вы можете менять дизайн компонента под стиль дизайна оформления.

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

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

Как вам материал?

0 реакции
👍
0
👎
0
😂
0
😱
0
😡
0
😢
0
Поделитесь материалом в социальных сетях

У Вас остались вопросы по статье? Задавайте. Буду рад ответить на них в комментариях.

Если этот материал совсем не то, куда Вас привел поисковик, попробуйте выполнить поиск по сайту или введите запрос в строку ниже. Также Вы можете посмотреть другие материалы в разделе статьи.

ТЕГИ МАТЕРИАЛА:
Об авторе

Сергей Дишук, фотограф-любитель и профессионал. Занимаюсь пейзажной, архитектурной, интерьерной, репортажной фотосъемкой, а также другими видами фотосъемки. Связал жизнь с IT, увлекаюсь программированием и разработкой программного обеспечения.

Занимаюсь панорамной фотосъемкой и созданием виртуальных 3D-туров более 8-ми лет. Имею опыт работы в программах Pano2VR, PTGui, Photomatix, Adobe Photoshop, Lightroom и других.

Реализовал некоторые фичи в проектах Pano2VR задолго до их официального появления. За всё время помог разобраться с Pano2VR более 5k пользователям, из них более 200 лично.

Материалы по теме статьи
Возможно, Вас заинтересуют эти материалы
Самое читаемое
Нет комментариев

Ранний доступ к материалам, эксклюзивный контент и другие бонусы от меня по подписке от 200 ₽ в месяц.

VK Donut
 
Платные темы OK
 
Boosty
 
Patreon
 
Сейчас просматривают
Опрос
Оцените ваши впечатления от сайта?
Всего проголосовавших: 49
Последние новости
Фотомарафон «Октябрь в объективе»

Объявляю о начале осеннего фотомарафона «Октябрь в объективе». Данный проект направлен на объединени...

 События
 07.10.2025    18:30    48    0
Мой сайт теперь можно установить, как приложение

Я постоянно работаю над тем, чтобы вам было удобнее и приятнее пользоваться моим сайтом sergeydishuk...

 Обновления сайта
 21.09.2025    08:10    55    0
Охота на лунное затмение провалилась и почему я все равно не жалею

Вчера, 7 сентября, должно было случиться лунное затмение. Я, как и многие фотографы, готовился его с...

 События
 08.09.2025    19:20    115    0
Последние статьи
Как я сделал виртуальный тур для музея академика П.Ф. Ракицкого

Иногда самые интересные проекты приходят неожиданно. Так случилось и с этим виртуальным туром: предл...

 О создании панорам
 04.10.2025    08:35    117    0
10 советов для начинающих фотографов

Фотография – это не только техника, но и умение видеть мир иначе. Для новичка путь к сильным кадрам ...

 Статьи по фотографии
 28.09.2025    12:32    67    0
30 вопросов и комментариев, которые бесят фотографа

В этой статье я привел десятки реальных примеров тех самых «болевых» вопросов, которые фотографы слы...

 Статьи по фотографии
 24.09.2025    10:32    65    0
Онлайн всего: 4
Гостей: 4
Пользователей: 0