iOS HTML5 Canvas toDataURL

2023-12-08

我需要一些帮助。我们似乎在 iOS 上遇到了有关通过 HTML 5 / Canvas 获取图像的 base64 的问题。如果我们使用画布的默认高度/宽度或对高度和宽度进行硬编码,一切都会正常工作。但是,如果我们将画布高度/宽度设置为图像 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:

  • The 解码的 GIF、PNG 和 TIFF 的最大大小图像是3兆像素适用于 RAM 小于 256 MB 的设备5兆像素适用于 RAM 大于或等于 256 MB 的设备。
  • 最大尺寸为画布元素 is 3兆像素适用于 RAM 小于 256 MB 的设备5兆像素适用于 RAM 大于或等于 256 MB 的设备。
  • 每个顶级入口点的 JavaScript 执行时间限制为 10 秒。

此限制不会引发任何错误,因此当您尝试渲染或读取 6MB 图像时,您将得到损坏的 blob/dataURL 字符串等。您会认为 File API 已损坏,canvas 方法 toDataURL/toBlob 已损坏,您是对的。但错误不在浏览器中,这是系统限制。

因此,这种限制会破坏 javascript API 的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS HTML5 Canvas toDataURL 的相关文章

随机推荐

  • 如何将多个(excel)文件读入R? [复制]

    这个问题在这里已经有答案了 我有数百个中等大小的 Excel 文件 5000 到 50 0000 行 大约 100 列 要加载到 R 中 它们具有明确定义的命名模式 例如x 1 xlsx x 2 xlsx etc 如何以最快 最直接的方式将
  • ADT 插件更新后使用某种库的所有 Android 项目都会抛出 ClassNotFoundException [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我正在使用 Eclipse 我在之后就面临这个问题谷歌
  • 为什么空格会影响相等字符串的同一性比较? [复制]

    这个问题在这里已经有答案了 我注意到 向相同的字符串添加空格会使它们使用时比较不相等is 而非空间版本比较相等 a abc b abc a is b outputs True a abc abc b abc abc a is b outpu
  • 更改 UINavigationItem 颜色

    我需要为 UINavigationBar 按钮设置自定义颜色 我正在做以下事情 RGB func 是一个定义 void viewWillAppear BOOL animated for UIView view in self navigat
  • Windows Phone 7 中的样式触发器

    我想使用 Windows Phone 7 中的样式触发器来根据布尔变量更改图像的源 我想做这样的事情
  • 使用 Javascript 关闭所有弹出窗口

    有谁知道如何在Javascript中关闭所有弹出窗口 由javascript弹出的窗口 Example 单击打开 3 个新窗口 按钮 并使用 window open 来 打开所有 3 个新窗口 单击一个按钮并关闭所有 3 个按钮 一起弹出窗
  • 右值引用和左值引用有什么区别? (代码生成)

    从较低级别的角度来看 r 值参考是什么样的 我似乎无法理解它 我可以查看从右值引用与左值引用生成的代码 等效的 C 或 x86 x64 示例吗 例如 这个构造会是什么样子 我们暂时假设没有复制省略 vector
  • Request.IsAuthenticated 始终返回 false

    我正在努力向我正在构建的站点添加登录功能 但登录后 Request IsAuthenticated 属性始终返回 true 我搜索了这个错误并一遍又一遍地找到相同的答案 但这些解决方案对我不起作用 来自 AccountController
  • Android:在 ConstraintLayout 中保留全宽和未定义高度 ImageView 的比例?

    In a ConstraintLayout an ImageView与其父级绑定的方式如下 它的左侧绑定到屏幕的左侧 它的右侧绑定到屏幕的右侧 它的顶部绑定到小部件的底部 它的底边绑定到屏幕的底边 Thus my ImageView看起来是
  • .Value = .Value 的作用与 VBA 中的 Evaluate() 函数类似吗?

    考虑以下片段 它将相同的公式写入两个单元格A1 and A2 Sub Main With Range A1 Formula 1 1 End With With Range A2 Formula 1 1 Value Value End Wit
  • 日期之间的差异

    我想计算两个时间之间的差异 其中一个是当前时间 另一个是 HH MM 格式 始终是未来时间 如果我只是从 now 中减去 futuretime 它当然应该是一个正数 这工作正常 直到 如果 now 是下午或晚上 而 futuretime 是
  • PHP按位左移32位问题以及大数算术运算的不良结果

    我有以下问题 第一 我试图对一个大数进行 32 位按位左移 并且由于某种原因该数字总是按原样返回 例如 echo 516103988 lt lt 32 echoes 516103988 因为将位向左移动一位相当于乘以 2 所以我尝试将数字乘
  • 错误:来自角度控制器的 [ng:areq]

    这是一个很遥远的事情 但是以前有人见过这个错误吗 我正在尝试使用 Express Angular 和 mongoDB 添加 传输器 每当我访问由传输控制器控制的页面时 我都会收到此错误 Error ng areq http errors a
  • 如何正确配置node.js以使用自签名根证书?

    所以 在绝望的路上 我想知道是否有人在某个地方可以帮助我配置nodejs以接受根CA自签名 我需要它才能通过使用 TLS 的节点获取来访问开发中的自定义 API 环境 操作系统 Ubuntu 20 04 作为虚拟机中的来宾 Windows
  • 根据 JavaScript 中的另一个对象数组过滤对象数组

    我有一个像这样的数组 arr1 A red B blue Q green R blue B green M red Q white R blue 每个对象都有两个键 值对 一个字母和颜色 我有另一个像这样的数组 filter A val B
  • Perl:在复杂哈希内生成数组

    为了使我的数据更易于访问 我想将表格数据存储在复杂的哈希中 当脚本循环遍历我的数据时 我试图增长一个 HoHoHoA 根据 perldsc 中的指南 push hash column i date hour data i 该脚本编译并运行没
  • JBoss 上的 JaxWS ClassCastException

    我正在使用 JBoss 5 1 0 GA 适用于 JDK6 和 jaxws 2 2 6 当我调用 Web 服务时 出现以下异常 java util ServiceConfigurationError javax xml ws spi Pro
  • Kotlin 中的简单泛型函数失败

    这是 Kotlin 中的一个简单的泛型函数 fun
  • RGoogleDocs 和现在的 RGoogleData

    RGoogle文档太棒了 它允许人们在 Google 上存储数据并将其实时读取到 R 前几天我尝试将其安装在计算机上 结果发现我能找到的只是 RForge 中的 RGoogleData 这两个包之间有什么关系呢 我尝试在同一搜索中谷歌搜索
  • iOS HTML5 Canvas toDataURL

    我需要一些帮助 我们似乎在 iOS 上遇到了有关通过 HTML 5 Canvas 获取图像的 base64 的问题 如果我们使用画布的默认高度 宽度或对高度和宽度进行硬编码 一切都会正常工作 但是 如果我们将画布高度 宽度设置为图像 src