如何使用 MSVC10 编译器在 x64 windows 上的 node-canvas 中启用 jpeg 支持?

How to enable jpeg support in node-canvas on x64 windows with MSVC10 compiler?

我需要在 nodejs 服务器端渲染 jpeg 图像。我安装 canvas npm 模块 使用以下构建说明:https://github.com/Automattic/node-canvas/wiki/Installation---Windows 我有手册中提到的 C:\libjpeg-turbo\。如果我这样做:

npm install canvas

那么这段代码不会启动 onload:

 var data = fs.readFileSync("./t.jpg"); var img = new Image();
 img.onload = function () {
     console.log("onload"); 
 }; 
 img.src = data;

(适用于 .png 数据)。如果我在命令行中指定 --with-jpeg,则 MSVC 会抱怨缺少 libjpeg.h。在此 npm 删除带有 msvc 项目的文件后,我无法自己设置路径(是否可以关闭此清理?)

那么如何为 windows 构建支持 jpeg 的 canvas?在网上找到关于此主题的问题但没有答案。

在我看来 binding.gyp 在第 143 行缺少 'include_dirs' 指令,因此编译器可以在 C:\libjpeg-turbo\ 目录中找到 libjpeg.h。尝试插入:

      'include_dirs': [
        'c:/libjpeg-turbo',
      ],

安装 MSVC10 和 64 位 nodejs。 当您的构建失败时,请使用以下可在网上找到的分配器:

  • 解压 gtk+-bundle_2.22.1-20101229_win64.zip 到 c:/gtk 。用这个 版本,其他人对我失败

  • 设置 libjpeg-turbo-1.4.0-vc64.exe 到 C:\libjpeg-turbo(32 位库 会因为没有有意义的消息而失败)

  • 前往 .\node_modules\canvas\build\ 并修改您的 binding.gyp。添加 'variables':
  {
    'GTK_Root%': 'C:/GTK', # Set the location of GTK all-in-one bundle
    'with_jpeg%': 'true',
    'libjpeg_root%':'C:/libjpeg-turbo',
    'with_gif%': 'false',
    'with_pango%': 'false',
    'with_freetype%': 'false'
  }

还有

['with_jpeg=="true"', {
          'defines': [
            'HAVE_JPEG'
          ],
          'conditions': [
            ['OS=="win"', {
              'libraries': [
                '-l<(libjpeg_root)/lib/jpeg-static.lib','-l<(libjpeg_root)/lib/jpeg.lib'
              ],
            'include_dirs': [
        '<(libjpeg_root)/include'
      ]
            }, {
              'libraries': [
                '-ljpeg'
              ]
            }]
          ]
        }] 

然后在 .gyp 文件所在的文件夹中执行以下命令:

node-gyp 配置

node-gyp 构建

恕我直言,此类模块的库应作为 npm 发行版的一部分包含在内,期待来自 nodejs 程序员的 WIN32/C++ 专业知识很奇怪...