【问题标题】:Jimp: image processing fail on module usageJimp:模块使用时图像处理失败
【发布时间】:2022-01-24 04:29:02
【问题描述】:

我无法使用Jimp

已安装:npm install --save jimp //OK

导入:import * as Jimp from 'jimp'; //OK

使用Jimp.read(someImage) //失败并出现错误

Uncaught (in promise): Error: Node's Buffer() not available

【问题讨论】:

  • 这似乎是bug in jimp。快速阅读告诉我,目前唯一可用的解决方案是将 jimp 版本锁定为 0.2.27 或更早版本,因为它是一种回归。不过,我还没有尝试过。编辑:澄清:可能不是错误,而是补丁中奇怪地引入的预期更改。
  • 我确实尝试了 0.2.27 版我遇到了错误Uncaught (in promise): TypeError: Jimp.read is not a function
  • 你没有发布的东西一定是出错了。我只是将 jimp@0.2.27 放入我的应用程序中,按原样在浏览器中导入,console.log(Jimp.read) 并返回一个函数。
  • 我试过 console.log(Jimp) 得到 {} 空对象。你如何导入它。 import * as Jimp from 'jimp';
  • 我正在使用import * as Jimp from 'jimp',它工作正常。我正在使用 webpack,但在 TypeScript/Angular 中应该没有什么不同。如果您尝试require('jimp'),会发生什么?你也可以试试import Jimp from 'jimp',因为 Jimp 是作为 CommonJS 导出的。我相信两者都应该有效。

标签: javascript angular image typescript


【解决方案1】:

这是 Jimp 0.2.28 中的重大更改,当前的解决方案是恢复到 0.2.27。但是,正如您在 cmets 中所指出的,import 不适用于 Jimp@0.2.27 for TypeScript。

看起来使用 TypeScript,requireimport 完成了两个不同的事情。因此,对于import,您需要有一个声明文件来声明模块,以便它可以在编译时确定模块是什么。如果你没有那个,TypeScript 将根本无法解决它。 require 发生在运行时,因此不涉及 TypeScript(并且您不会拥有 required 模块的类型信息)。

This answer 比我解释得更好。

看起来 Jimp 0.2.27 没有定义 .d.ts 文件,而 0.2.28 有。我不确定为什么他们在一个补丁中包含了这么多变化。

【讨论】:

    【解决方案2】:

    在执行import * as Jimp from 'jimp'; 时出现编译器错误。 原来Jimp的@type文件使用export =syntax,所以必须像下面这样导入:

    import Jimp = require('jimp');

    【讨论】:

      【解决方案3】:

      在nodeJS环境和纯.js文件中你可以这样做:

      import * as JimpObj from 'jimp';
      
      const Jimp = JimpObj.default;
      
      
      async function analizeImages() {
          const image = await Jimp.read(`image.png`);
          console.dir(image.bitmap.data);
      }
      

      【讨论】:

        猜你喜欢
        • 2020-11-14
        • 2021-10-11
        • 2020-01-16
        • 1970-01-01
        • 1970-01-01
        • 2018-12-13
        • 2020-09-20
        • 2021-03-21
        • 2012-01-20
        相关资源
        最近更新 更多