Node.js 画布图像损坏

如何解决Node.js 画布图像损坏

我对编码非常陌生,所以我只是将教程中的所有内容拼凑在一起。

无论如何,当我尝试在某些大型 .png 文件上使用 Canvas.loadImage() 时,它们在视觉上已损坏。 它不会发生在 .jpgs 上,它只会发生在我从 discord 下载的这些特定图像上。并且仅当它们超过 1 兆字节时。

如果我在 Paint 中打开一个新图像并粘贴原始图像,并将其保存为 .png,我可以运行该图像,并且它不会损坏。 那么有人知道它为什么会腐败吗?如果这不是我正在做的事情,我如何即时重新编码它们以使其不会损坏。

我尝试了两种/三种不同的方法,它们都产生了相同的结果:

首先作为回调(这是正确的术语吗?)?:

function test(){
  const imgCanv = Canvas.createCanvas(1284,2778); //the size doesn't matter,it breaks no matter what
  const ctx = imgCanv.getContext("2d");
  const img = Canvas.loadImage("image.png");
  img.then((img) => {
    ctx.drawImage(img,0);
    var out = fs.createWriteStream("result.png")
    var stream = imgCanv.pngStream();
    stream.on("data",function(chunk){
      out.write(chunk);
    });
    stream.on("end",function(){
      console.log("Success");
    });
  }).catch(err =>{
    console.log("An error occured:" + err);
  })
}
test();

还有他们在文档中建议的方式,使用 img.onload:

function test(){
  const imgCanv = Canvas.createCanvas(1284,it breaks no matter what
  const ctx = imgCanv.getContext("2d");
  const img = new Canvas.Image();
  img.onload = () => ctx.drawImage(img,0);
  img.onerror = err => { throw err };
  img.src = "image.png";

  var out = fs.createWriteStream("result.png")
  var stream = imgCanv.pngStream();

  stream.on("data",function(chunk){
    out.write(chunk);
  });

  stream.on("end",function(){
    console.log("Success");
  });
}
test();

我不能发布图片,所以这里有链接

https://user-images.githubusercontent.com/73259768/112240357-45470080-8c9c-11eb-9cc1-9af4d80bb16f.png

https://user-images.githubusercontent.com/73259768/112240416-5ee84800-8c9c-11eb-8112-f89a5fc28617.png

(我尝试使用示例图像,但它不会损坏,即使我遵循完全相同的步骤。它必须是 discord 正在执行的操作,或者原始屏幕截图中的某些内容。不知道。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?