Canvas.toDataURL不适用于移动Safari iOS?
我尝试了以下。 我从一个SVG图像创build一个<img>
。 然后我画在canvas上,最后导出为PNG,并将生成的PNG设置为新的<img>
。 它适用于Android,Chrome,Safari,FireFox。 但是, canvas.toDataUrl()
不适用于iOS上的移动Safari。 它只在你不使用canvas上的SVG图像时才起作用。
这里是我用来testing的代码:
<div id="mydiv"></div> <img id="image2">
var mydiv = document.getElementById('mydiv'), image2 = document.getElementById('image2'); image2.crossOrigin="anonymous"; var image3 = new Image(); mydiv.appendChild(image3); image3.onload = function() { var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'); canvas.width = image3.width; canvas.height = image3.height; ctx.drawImage(image3,0,0, canvas.width, canvas.height); var dataUrl = canvas.toDataURL('image/png'); image2.src = dataUrl; } image3.crossOrigin="anonymous"; image3.src = "https://dl.dropboxusercontent.com/u/47067729/sticker4.svg";
我在这里创build了一个JSFiddle: http : //jsfiddle.net/confile/ZqJYG/
只有在iOS上运行时才会出现此问题。 它不在移动版Safari上运行,也不在移动版Chrome上运行。
有没有解决这个问题的方法?
我认为你的浏览器可能不支持它。 请参阅以下内容。
http://caniuse.com/#search=canvas
iPhone 3GS - Mobile Safari 4.0.5 iPhone 4 - Mobile Safari 4.0.5 iPhone 4s - Mobile Safari 5.1 iPad 1 / 3.2.2 - Mobile Safari 4.0.4 iPad 2 / 4.3.3 - Mobile Safari 5.02 iPad 2 / 5.0 - Mobile Safari 5.1 iPad 3 / 5.1 - Mobile Safari 5.1 iPhone 5 / 6.0 - Mobile Safari 6.0 iPad 4 / 6.0 - Mobile Safari 6.0
您还可以使用以下代码testing您的浏览器支持:
function supportsToDataURL() { var c = document.createElement("canvas"); var data = c.toDataURL("image/png"); return (data.indexOf("data:image/png") == 0); }
希望这可以帮助。
这可能是也可能不是同一个问题,但我从iOS调用(在其他地方工作)获得“data:”,并通过显着减小canvas的大小来解决问题。 我认为这是加载图像或返回string,并以特别无用的方式处理它的内存不足。