Как обратится к чужому canvas или скриншот с яндекс панорамы.

jabbaxatt

Добрый модератор
Регистрация
21 Янв 2009
Сообщения
902
Реакции
432
Стоит задача - получить png\или jpg картинку с яндекс панорамы в определённой точке.

API яндекса позволяет вывести нужную мне конкретную панораму на мою страничку.

Яндекс выводит свои панорамы в canvas.

А дальше - я не могу получить это изображение.

Если я сам создаю canvas - то изображение с него я спокойно сохраняю:
Код:
// создадим свой канвас
    var canvas = document.createElement("canvas");
    canvas.height = canvas.width = 100;
    $('#c').append(canvas);
    var ctx = canvas.getContext("2d");
    //draw a circle
    ctx.beginPath();
    ctx.arc(55, 55, 40, 0, Math.PI*2, true);
    ctx.closePath();
    ctx.fill();


// получим Base64 код картинки из Canvas
var dataURL = canvas.toDataURL("image/png");

// отправим картинку на сохранение
$.post("obrabotka.php", {kodkartinki: dataURL} );

// Дальше понятно, файл "obrabotka.php" PHP сохраняет полученное через POST изображение

Но к создаваемому яндексом canvas я не могу обратится на JS
Так не работает:
Код:
   // Нужно получить доступ к канвас яндекса
var canvas = document.getElementsByTagName('canvas');


Да, экспериментирую с панорамой что в песочнице яндекса приводится:
Для просмотра ссылки Войди или Зарегистрируйся
 
Первое, на что я обратил бы внимание:
Код:
var canvas = document.getElementsByTagName('canvas');
Данный метод всегда выдает массив, а не конкретный элемент. Соответственно:
Код:
var canvas = document.getElementsByTagName('canvas');
for (i in canvas) {
    console.log(canvas[i]);
}

Также, надо делать проверку, загружена ли картинка в этот канвас.
 
Также, надо делать проверку, загружена ли картинка в этот канвас.

Канвас один на странице.
Но код
Код:
var canvas = document.getElementsByTagName('canvas');

var dataURL = canvas[0].toDataURL("image/png");

Сохраняет картинку с чёрным экраном.

Правда размер картинки (ширина\высота) - совпадает с размером карты.

Задержку ставил - 10 секунд. Т.е. открываем страницу, в ней прорисовывается за 2-3 секунды панорама. Через 10 сек. запускается мой скрипт, но сохраняет чёрную картнку.
 
Вероятнее всего контекст канваса webgl, а preserveDrawingBuffer не true.
 
Т.е. я на это повлиять не могу?
Боюсь, что нет. Сама лицензия Яндекс запрещает
Для просмотра ссылки Войди или Зарегистрируйся
п 2.3.7.1, п 2.3.7.5

Посмотрите в сторону Для просмотра ссылки Войди или Зарегистрируйся. Еще можно посмотреть Google-панорамы, возможно, там в бесплатном API поддерживаются нужные вам возможности.
 
Прошу простить, не было времени ответить. Суть вот в чем. Яндексовские карты создают при помощи WebGL сферу, которую можно крутить-вертеть. Соответственно, сама картинка (панорама) является текстурой этой сферы. Если сильно упороться и расковырять библиотеку, которая обслуживает данный канвас, можно найти место, где эта текстура биндится на 3D объект и дергать прямой URL картинки-текстуры. К слову, не думаю что ТС-а особо парят вопросы лицензирования яндекса.
 
Назад
Сверху