8

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

npm 安装画布

那么这段代码不会启动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 项目删除文件之后,我无法自己设置路径(是否可以关闭此清理?)

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

4

2 回答 2

3

安装 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。添加“变量”:
  {
    '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 文件所在的文件夹中执行以下命令:

节点gyp配置

节点 gyp 构建

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

于 2015-07-31T04:43:38.187 回答
0

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

      'include_dirs': [
        'c:/libjpeg-turbo',
      ],
于 2015-06-29T01:52:30.423 回答