Страница 1 из 1

Canvas to Blob не работает в Openlayers3

Добавлено: 29 янв 2016, 08:16
zhandos
добрый день

имею следующий код в Openlayers3:
1. HTML

Код: Выделить всё

<li>
      <a href="#" id="export-as-image" onclick="saveAsPng()">
       <i class="glyphicon glyphicon-camera">
       </i>
       Скачать рисунок
      </a>
     </li>
2. JS

Код: Выделить всё

saveAsPng = function(){
  canvas = document.getElementsByTagName('canvas')[0];
  canvas.toBlob(function (blob) {
    saveAs(blob, 'map.png');
  });
};
в итоге выходит ошибка Uncaught TypeError: canvas.toBlob is not a function
пробовал добавить нa все слои (растровый через Geoserver+векторный geojson) crossOrigin: 'anonymous', не помогло

Помогите дельным советом, заранее благодарен!!!

Re: Canvas to Blob не работает в Openlayers3

Добавлено: 29 янв 2016, 10:20
parshin
MDN утверждает, что метод toBlob мало кем реализован: https://developer.mozilla.org/en-US/doc ... patibility

Если вы хотите скачать canvas как картинку, попробуйте вот так: http://stackoverflow.com/questions/9238 ... pg-png-pdf

Re: Canvas to Blob не работает в Openlayers3

Добавлено: 29 янв 2016, 11:41
zhandos
Применил другой метод:

Код: Выделить всё

saveAsPng = function(){
  var canvas = document.getElementsByTagName('canvas')[0];
  var img    = canvas.toDataURL("image/png");
  document.write('<img src="'+img+'"/>');
};
Однако имеется следующая ошибка:
Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

Re: Canvas to Blob не работает в Openlayers3

Добавлено: 29 янв 2016, 13:12
Ariki

Re: Canvas to Blob не работает в Openlayers3

Добавлено: 29 янв 2016, 13:27
parshin
А это проблемы с безопасностью. Все картинки, загруженные с других доменов, которые были использованы при формировании canvas, должны быть получены с CORS headers (https://developer.mozilla.org/en-US/doc ... ntrol_CORS).

Для этого
  • сервер, отдающий картинки, должен поддерживать CORS
  • клиент при запросе картинки должен указывать параметр crossOrigin (со значением, например, 'anonymous')