пятница, 18 декабря 2015 г.

Конвертирование сферической панорамы в кубическую

Преамбула:

Как известно Adobe Flash Player, скажем так, подвергается гонениям со стороны браузеров всех мастей.

Один клиент имеет на сайте некоторое количество флеша как в виде простых анимашек, так и одну с панорама-вьювером с некоторым функционалом.

Если простые анимашки перевести на рельсы HTML5 достаточно просто, то с панорамой немного посложнее.

Выбор вьювера для панорамы пал на Pannellum.

Основные преимущества:

  • Опенсёрсный;
  • Шустрый;
  • Имеет кроме просмотра доп. возможности по размещению меток (метки отображаются в DOM, а не на canvas);
  • Имеет богатый набор опций для конфигурирования.



Проблема:

Pannellum отображает кубические панорамы, а у клиента сферическая. Встала проблема конвертации панорамы из сферической в кубическую.

В ходе поиска попадались как платные так и бесплатные утилиты. Но одни требовали "много денег", другие установку доп. софта. И вот чудом-юдом попалась одна подходящая опенсёрсная, без регистрации и смс установки стороннего софта и что тоже не маловажно кроссплатформенная.



Решение:
  1. Проверяем есть ли на компе java. Если нет, то качаем/устанавливаем (достаточно JRE).
  2. Качаем/распаковываем архив с утилитой от сюда или от сюда.
    Из всего архива нужен по сути только файл EquirectangularToCubic.jar
  3. Запускаем утилиту:

    java -jar EquirectangularToCubic.jar path_to_image.jpg
    

    Для примера можно взять эту сферическую панораму.


    На выходе получаем папку:
    cubic_path_to_image
        |__examplepano_b.jpg
        |__examplepano_d.jpg
        |__examplepano_f.jpg
        |__examplepano_l.jpg
        |__examplepano_r.jpg
        |__examplepano_u.jpg
    

Примечания:

  • Дополнительные ключи для запуска утилиты можно подсмотреть в файле EquirectangularToCubic.java в методе parseCommandLine
  • Важно! Для корректного отображения панорамы в Pannellum-е необходимо сделать переименование файлов:
    *_b.jpg ↔ *_f.jpg
    *_u.jpg ↔ *_r.jpg