Я хочу сохранить свой холст в img. У меня есть эта функция:
function save() {
document.getElementById("canvasimg").style.border = "2px solid";
var dataURL = canvas.toDataURL();
document.getElementById("canvasimg").src = dataURL;
document.getElementById("canvasimg").style.display = "inline";
}
Это дает мне ошибку:
Uncaught SecurityError: Не удалось выполнить 'toDataURL' для 'HTMLCanvasElement': испорченные полотна не могут быть экспортированы.
Что я должен делать?
javascript
html5-canvas
user3465096
источник
источник
Ответы:
По соображениям безопасности ваш локальный диск объявлен как «other-domain» и испортит холст.
(Это потому, что ваша самая важная информация, вероятно, находится на вашем локальном диске!).
Во время тестирования попробуйте эти обходные пути:
Разместите все файлы, относящиеся к странице (.html, .jpg, .js, .css и т. Д.), На рабочем столе (не в подпапках).
Опубликуйте свои изображения на сайте, который поддерживает обмен между доменами (например, dropbox.com). Убедитесь, что вы помещаете свои изображения в общую папку dropbox, а также устанавливаете флаг перекрестного происхождения при загрузке изображения (var img = new Image (); img.crossOrigin = "anonymous" ...)
Установите веб-сервер на компьютер для разработки (у веб-серверов IIS и PHP есть бесплатные выпуски, которые прекрасно работают на локальном компьютере).
источник
В теге img установите перекрестное происхождение в Anonymous.
источник
Если кто-то просматривает мой ответ, вы можете быть в таком состоянии:
1. Попытка получить скриншот карты на холсте, используя openlayers (версия> = 3)
2. И просмотрел пример экспорта карты
3. Использование ol.source.XYZ для рендеринга слоя карты
Бинго!
Используя ol.source.XYZ.crossOrigin = 'Anonymous', вы решите проблему. Или как следующий код:
источник
Если вы используете
ctx.drawImage()
функцию, вы можете сделать следующее:И в вашем обратном вызове вы можете теперь использовать
ctx.drawImage
и экспортировать его с помощьюtoDataURL
источник
Tainted canvases may not be exported.
сообщение об ошибке.В моем случае я рисовал на холсте тег из видео. Чтобы устранить ошибку испорченного холста, мне пришлось сделать две вещи:
источник
Похоже, вы используете изображение из URL-адреса, для которого не установлен правильный заголовок Access-Control-Allow-Origin и, следовательно, возникает проблема. Вы можете получить это изображение с вашего сервера и получить с сервера, чтобы избежать проблем с CORS.
источник
Я решил проблему с помощью
useCORS: true
опцииисточник
Посмотрите [CORS enabled image] [1] из MDN. В основном у вас должен быть сервер, на котором размещены изображения с соответствующим заголовком Access-Control-Allow-Origin.
Вы сможете сохранить эти изображения в DOM Storage, как если бы они обслуживались с вашего домена, иначе вы столкнетесь с проблемой безопасности.
источник
Просто как ответ на вопрос @ markE - если вы хотите создать локальный сервер. У вас не будет этой ошибки на локальном сервере.
Если на вашем компьютере установлен PHP:
php -S localhost:3000
← Обратите внимание на заглавную 'S'или
Если на вашем компьютере установлен Node.js:
npm init -y
npm install live-server -g
илиsudo npm install live-server -g
на макинтошlive-server
и он должен автоматически открыть новую вкладку в браузере с открытым вашим сайтом.Примечание: не забудьте иметь файл index.html в корне вашей папки, иначе у вас могут возникнуть некоторые проблемы.
источник
Я также решил эту ошибку, добавив
useCORS : true,
в свой код, как -источник