Canvas.toDataURL() скачать ограничение по размеру

Я пытаюсь загрузить изображение всего холста, используя canvas.toDataURL(). Изображение представляет собой карту, отображаемую на холсте (Open Layers 3).

В Firefox я могу использовать следующее, чтобы загрузить карту по щелчку ссылки:

var exportPNGElement = document.getElementById('export_image_button');

if ('download' in exportPNGElement) {
    map.once('postcompose', function(event) {
    var canvas = event.context.canvas;
    exportPNGElement.href = canvas.toDataURL('image/png');
});

map.renderSync();

} else {
alert("Sorry, something went wrong during our attempt to create the image");
}

Однако в Chrome и Opera я нажимаю ограничение по размеру ссылки. Я должен физически сделать окно меньше для загрузки, чтобы работать.

Существуют различия в размерах между браузерами, особенно для Chrome. Подобный пост здесь (старше 2 лет) предлагает обходное решение на стороне сервера:

canvas.toDataURL() для большого холста

Есть ли клиентская сторона для этого вообще?

Ответ 1

Отъезд toBlob https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob

canvas.toBlob(function(blob) {
    exportPNGElement.href = URL.createObjectURL(blob);
});

поддержка браузера не такая потрясающая, как toDataURL. Но Chrome и Firefox есть, поэтому он решает вашу самую большую проблему. Ссылка mdn выше также имеет polyfill на основе toDataURL, поэтому вы получаете наилучшую возможную поддержку.

На всякий случай, когда вы не знали, вы также можете значительно уменьшить размер, используя сжатие jpeg

exportPNGElement.href = canvas.toDataURL('image/jpeg', 0.7);