【问题标题】:Image.onload not working for .jpg images changed to .pngImage.onload 不适用于 .jpg 图像更改为 .png
【发布时间】:2017-12-24 16:47:15
【问题描述】:

我正在开发一个 Cordova windows10 应用程序,在该应用程序中,我使用 (navigator.camera.getPicture(resolve, reject, {...encodingType: 0,...}) 将图像捕获为“jpg”,通过将扩展名更改为“.png”将其移动到另一个位置,目前正在尝试调整它的大小。但是,当我尝试加载图片时,它不会加载而是抛出:

DOM7009:无法将 url: '.../myimage.png' 处的图像解码为 MIME 'image/png'。

如果图像被捕获为“.png”,但如果图像最初是“.jpeg”并且扩展名更改为“.png”,则效果很好。在尝试加载图像之前,我会执行以下操作。

let canvas = document.createElement('canvas');
let ctx = canvas.getContext('2d');
let image = new Image();
image.src = fileSystemPath + imageName // I get : ms-appdata:///local/randomgeneratedID.png

image.onload = function() {
  ...
  ctx.drawImage(image, 0, 0, myHeight, myWidth);
  callback(canvas.toDataURL("image/png", 0.9))
  ...
}

问题是图像根本没有加载。我在 image.onload 函数内进行了 console.logged,但它没有显示出来。不知道为什么它加载“.png”文件而不是“.jpg”文件重命名为“.png”。

【问题讨论】:

    标签: javascript cordova dom-events mime


    【解决方案1】:

    问题是图像根本没有加载。我在 image.onload 函数中进行了 console.logged,但它没有显示。

    我想你的 .png 图片很重:

    当图像被捕获为“.png”时,它可以完美地工作

    而您的新 .png(ex-jpeg)图像重量很轻:

    通过将扩展名更改为“.png”并将其大小调整为缩略图来将其移动到另一个位置。

    可能发生的情况是您首先img.src 设置为一个值 - 实际加载从此时开始,但 处理程序稍后设置 .因此,如果图像非常小/缓存(您编写了调整它们的大小),则可以在分配处理程序之前下载它。尝试这样做:

    image.onload = function() // handler first
    image.src = fileSystemPath + imageName // loading next
    

    希望这是有用的信息。即使您的问题不是我一直在谈论的问题,我写的内容对您的代码仍然有效。

    【讨论】:

    • 感谢您的回复。 .png 比我捕获的原始 .jpg 小(我使用 cordova 的 moveTo() 方法移动文件)。在执行 image.onload 之前,我确实为 image.src 分配了完整路径,尽管它在 iOS 上可以正常工作。正如你所说,我尝试在加载图像后分配 src,但不幸的是应用程序无法在应用程序中加载旧图像并崩溃。
    • 通过在画布上下文中绘制加载的图像,在图像加载后(不幸的是没有发生)调整大小。然后我执行 getDataUrlthing 从图像 url 获取 Base64 字符串
    • 您写道“很遗憾,该应用无法在应用中加载旧图像并崩溃。”那么,它适用于您捕获的新图像吗? “崩溃”是什么意思?
    • 顺便说一句,在image.src = fileSystemPath + imageName 之后,您也缺少;。它也可能会引起一些麻烦。
    • 该应用程序有一些持久图像,当我在图像加载后分配图像源时,应用程序根本没有启动(相当大的应用程序-.-)。分号是一个错字;)关于旧图像未加载问题,我正在尝试创建一些可以正常加载旧图像的方法,但是用相机捕获的任何新图像在完全加载后都会得到src 属性集。我会告诉你进展如何。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 2013-10-14
    • 2021-02-06
    • 1970-01-01
    • 2012-06-01
    • 2011-05-23
    • 2013-05-10
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多