Javascript iOS HTML5画布toDataURL

Javascript iOS HTML5画布toDataURL,javascript,ios,html,canvas,Javascript,Ios,Html,Canvas,我需要一些帮助。关于通过HTML5/Canvas获取图像的base64,我们似乎在iOS上遇到了问题。如果我们使用画布的默认高度/宽度,或者对高度和宽度进行硬编码,则一切正常。但是,如果我们将画布的高度/宽度设置为图像src的高度/宽度,那么图像将不会加载到画布中,因此我们不会将图像作为base64 有效的代码段: function convertImageToBase64(imgUrl, callback) { var canvas = document.createElement("

我需要一些帮助。关于通过HTML5/Canvas获取图像的base64,我们似乎在iOS上遇到了问题。如果我们使用画布的默认高度/宽度,或者对高度和宽度进行硬编码,则一切正常。但是,如果我们将画布的高度/宽度设置为图像src的高度/宽度,那么图像将不会加载到画布中,因此我们不会将图像作为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;
}
我们需要能够根据图像本身确定画布的高度/宽度

非常感谢您的指导或帮助。

iOS的所有这些:

  • 小于256 MB RAM的设备的解码GIF、PNG和TIFF图像的最大大小为300万像素,大于或等于256 MB RAM的设备的最大大小为500万像素
  • 小于256 MB RAM的设备的画布元素的最大大小为300万像素,大于或等于256 MB RAM的设备的500万像素
  • 对于每个顶级入口点,JavaScript执行时间限制为10秒
这一限制不会引发任何错误,因此您将尝试渲染或读取6MB图像,您将得到一个损坏的blob/dataURL字符串,等等。您会认为文件API被破坏了,画布方法toDataURL/toBlob被破坏了,您是对的。但浏览器中没有bug,这是一个系统限制


因此,这种限制为javascript API创建了一种不正常的行为

附录:这段代码片段在iPad Mini上确实有效,但在iPhone4w/iOS7x和iPhone5w/iOS8上存在问题。iPad MINI有iOS 8iOS,但在画布和图像方面有一些限制。检查一下。@Pinal谢谢,这就是我发现的问题所在。然而,我不能接受一个评论作为回答;P