如何在文件输入JavaScript中处理大型图像文件

如何在文件输入JavaScript中处理大型图像文件,javascript,reactjs,image,canvas,Javascript,Reactjs,Image,Canvas,我有图像文件要上传到我的react应用程序中 形象= 大小:28mb 分辨率:8xxx x 12xxx onFileChange(e){ const imageFile = e.target.files[0] const imageBase64 = fileToBase64(imageFile) let img = new Image() img.onload = () => { const canvas = document.createElement("ca

我有图像文件要上传到我的react应用程序中

形象=
大小:28mb
分辨率:8xxx x 12xxx

onFileChange(e){
  const imageFile = e.target.files[0]
  const imageBase64 = fileToBase64(imageFile)
  let img = new Image()
  img.onload = () => {
    const canvas = document.createElement("canvas")
    const ctx = canvas.getContext("2d")

    // crop process ... (vanilla js)

    canvas.drawImage(...)
    return canvas.toDataURL()
  }
  img.src = imageBase64
}
我的react应用程序在绘制图像时总是出现故障。 有时会使选项卡浏览器崩溃

试用期:
-macOS:chrome显示“显示此网页时出错”
-windows 10:加载图像并在画布上显示黑色图像时chrome出现故障


或者,在javascript/canvas/others中加载图像是否有任何限制大小?

“大小:28mb”-基本上不相关,重要的部分是“分辨率:8xxx x 12xxx”-因此至少是96000000像素,RGB的三倍是2880000000字节,或者您的浏览器必须在内存中处理约275MB,将图像绘制到画布上。@CBroe有什么想法吗?我不想降低图像文件的质量。为什么这是使用画布,你是否试图在上传之前向用户显示图像?如果没有这一部分,这可能会更加顺畅,因为浏览器只需处理28 MB的实际文件大小。@CBroe试图将图像放到画布上的过程是我裁剪图像并返回base64字符串,然后发送到服务器的过程。但是,当画布在裁剪过程后绘制图像时,它总是会在选项卡屏幕上出现问题,您显示的代码不会进行任何裁剪。也许没有真正的解决办法,裁剪需要画布。您只能先上载完整图像,而不使用画布,然后在服务器端进行裁剪。但是,您可能需要以某种方式为裁剪实现不同的UI…“大小:28mb”-大部分不相关,重要的部分是“分辨率:8xxx x 12xxx”-因此至少是96000000像素,RGB的三倍是2880000字节,或者您的浏览器必须在内存中处理约275MB,将图像绘制到画布上。@CBroe有什么想法吗?我不想降低图像文件的质量。为什么这是使用画布,你是否试图在上传之前向用户显示图像?如果没有这一部分,这可能会更加顺畅,因为浏览器只需处理28 MB的实际文件大小。@CBroe试图将图像放到画布上的过程是我裁剪图像并返回base64字符串,然后发送到服务器的过程。但是,当画布在裁剪过程后绘制图像时,它总是会在选项卡屏幕上出现问题,您显示的代码不会进行任何裁剪。也许没有真正的解决办法,裁剪需要画布。您只能先上载完整图像,而不使用画布,然后在服务器端进行裁剪。但是你可能需要为裁剪实现一个不同的UI…