iOS HTML5 Canvas toDataURL
我需要一些帮助。 我们似乎有问题与iOS通过HTML 5 / Canvas获取图像的base64。 如果我们使用canvas的默认高度/宽度或硬编码高度和宽度,一切正常。 但是,如果我们将canvas高度/宽度设置为图像的src,那么图像将不会加载到canvas中,因此我们不会将图像作为base64。
其中的代码片段:
function convertImageToBase64(imgUrl, callback) { var canvas = document.createElement("canvas"); var context = canvas.getContext('2d'); // load image from data url var imageObj= new Image(); imageObj.onload = function () { var dataUrl; context.drawImage(imageObj, 0, 0, canvas.width, canvas.height); dataUrl = canvas.toDataURL("image/png"); callback.call(this, dataUrl); canvas = null; }; imageObj.src = imgUrl; }
在iOS上无法运行但在Android上运行的代码片段:
function convertImageToBase64(imgUrl, callback) { var canvas = document.createElement("canvas"); var context = canvas.getContext('2d'); // load image from data url var imageObj= new Image(); imageObj.onload = function () { var dataUrl; canvas.width = imageObj.width; canvas.height = imageObj.height; context.drawImage(imageObj, 0, 0, canvas.width, canvas.height); dataUrl = canvas.toDataURL("image/png"); callback.call(this, dataUrl); canvas = null; }; imageObj.src = imgUrl; }
我们需要能够根据图像本身来确定canvas的高度/宽度。
任何指导或协助是最感激的。
iOS的所有限制都是实际的:
- 对于小于256 MB RAM的设备, 解码的GIF,PNG和TIFF图像的最大尺寸为 3百万 像素,对于大于或等于256 MB RAM的设备, 最大尺寸为 500万像素 。
- 对于小于256 MB RAM的设备, canvas元素的最大尺寸为300万 像素,对于大于或等于256 MB RAM的设备,最大尺寸为500万像素 。
- 每个顶级入口点的JavaScript执行时间被限制为10秒。
这个限制不会抛出任何错误,所以你会尝试渲染或读取6MB的图像,你会得到一个破碎的blob / dataURLstring等等。 你会认为File API被破坏,toDataURL / toBlob的canvas方法被破坏,你会是正确的。 但错误不在浏览器中,这是一个系统限制。
所以这个限制为JavaScript API创build了一个破碎的行为。