windows下的node-canvas历程
背景:由于在前期开发的过程中,对前端的小图片采用了css-sprite,开始的时候都是在http://spritegen.website-performance.org/站点上合成图片及样式的,但是某天该站点突然不能访问,开始还怀疑是运维把站点给屏蔽了,后来才知道这个站点真的挂了,顿时觉得使用web站点上的工具太没有安全感了,所以决定在本地搭建一个css-sprite的工具环境。
所以接下来就是nodejs的css-sprite之旅了。nodejs处理图片需要使用到node-canvas这个图像模块,在windows环境下搭建整个环境还是需要几个步骤:
1.安装Python 2.7版本,3.0以上不支持;下载地址:https://www.python.org/downloads/
2.安装node-gyp模块,使用命令行:npm install -g node-gyp;
3.安装Visual C++ 2010 Express,编译时需要使用,下载地址:http://www.visualstudio.com/zh-cn/downloads/download-visual-studio-vs#DownloadFamilies_4
4.下载GTK包并解压在C:\GTK目录下并添加C:\GTK\bin到系统path路径中;
(GTK+, or the GIMP Toolkit, is a multi-platform toolkit for creating graphical user interfaces. Offering a complete set of widgets, GTK+ is suitable for projects ranging from small one-off tools to complete application suites.)
win64下载地址(推荐):http://ftp.gnome.org/pub/gnome/binaries/win64/gtk+/2.22/gtk+-bundle_2.22.1-20101229_win64.zip
5.安装node-canvas模块,使用命令行:npm install -g node-canvas;
编译成功后,在全局模块目录下会存在npm\node_modules\canvas\build\Release\canvas.node文件,在此目录下使用node命令行执行var c = require('canvas');如果输出undefine则编译成功;
到此,不知道你已经踩过几个坑了,反正我踩好些个。
1.由于我之前安装了Python 3.0以上版本,故在node-canvas编译时报错,此错误在错误提示信息中很明显,直接下载个Python 2.7版本并改写path路径即可解决。
2.开始时我是在http://www.gtk.org/download/win64.php下载all-in-one bundle(即GTK+的所有编译文件),这个已是当前最新版本gtk+-bundle_3.6.4-20131201_win64,
但是在使用该版本编译时会提示C:\GTK\lib\libpng.lib未找到的错误,这是一个图片处理的核心库文件,不知道包提供者为什么没有把libpng给编译成lib文件。这个问题编译出来也很明显,所以就在GTK+站点上下载了libpng模块,提取其中的libpng.lib文件,libpng1.5版本没有提供libpng.lib文件,libpng1.4版本中有提供,所以我就使用了1.4版本中的libpng.lib文件,编译成功后执行var c = require('canvas');提示模块缺失,就使用了depends检查Release目录下canvas.node的dll依赖,发现存在几个dll缺失的情况,从系统system32中查找相应的dll并拷贝到C:\GTK\bin目录下,运行var c = require('canvas');输出为undefined。正确。
depends下载地址:http://www.dependencywalker.com/
3.运行npm install spritegen下载spritegen模块,该模块调用canvas做了些css-sprite的功能,运行其中的test,执行失败,提示libpng的1.4与1.5版本使用冲突,具体是C:\GTK\include\libpng15使用了libpng 1.5版本但是在问题2解决的过程中我使用了1.4版本中的lib文件,由于站点上下载的libpng1.5版本未能提供.lib文件,所以我尝试使用vc++ 2010版本编译,但是未能成功,由于受限于公司开发环境也不想在vs版本上做过多纠缠,所以就想在web上download一个libpng.lib文件,但是所download的文件均未能正常编译。最后放弃了GTK+的最新版本使用了gtk+-bundle_2.22.1-20101229_win64版本,node-canvas正常编译,且执行spritegen test成功,即canvas模块能正常使用了。
一切问题解决完就是在spritegen代码的基础上增加自己的功能了,保证和spritegen.website-performance.org站点生成出来的格式一致,这样也就不用去改以前写好的css样式了,而且也可以添加自己想要的功能,最最重要的是在本地生成,安全便捷可重用^_^。
参考:
https://github.com/Ancestry/spritegen
http://delarre.net/posts/installing-node-canvas-for-windows/
https://github.com/LearnBoost/node-canvas/wiki/Installation---Windows#installing-python-for-windows
http://www.gtk.org/download/win64.php
windows下的node-canvas历程的更多相关文章
- Windows 下安装 Node.js
搭建博客系列的 Node.js 环境安装.Windows 下面安装可以通过图形化界面进行安装,非常方面. 1.打开 Node.js 官网,下载对应版本的安装包(msi 后缀的) 2.双击运行下载的程序 ...
- windows下安装node【转】
windows下安装node报错2503.2502 windows下命令行安装,首先使用管理员权限获取cmd msiexec /package node-v10.16.0-x64.msi 根据提示一步 ...
- windows下安装node.js及环境配置、部署项目
windows下安装node.js及环境配置.部署项目 一.总结 一句话总结: 安装nodejs软件:就像普普通通的的软件那样安装 配置nodejs安装的全局模块的环境变量 并且安装cnpm(比如cn ...
- Windows下安装node
1.安装node及npm Windows下安装软件都是傻瓜式安装,首先登陆官网(https://nodejs.org/en/)下载对应的node程序,然后双击进行安装.安装过程基本上是点击'Next' ...
- windows下搭建node.js及npm的工作环境
近期在研究数据可视化D3框架,决定在windows下搭建一个nodejs及npm的工作环境,在网上查了n篇文章,别管是编译源代码安装也好.还是使用node.msi格式安装包也好,总是有问题.终于,功夫 ...
- 在Windows下开发Node.js的C/C++原生扩展
准备工作 (1)本机系统说明:本人机器为win7 64位,32位也可以. (2)软件安装: VISUAL C++ 2010 EXPRESS(Visual Studio 2010也可以): window ...
- [转]Windows下配置Node.js和Cordova
本文转自:https://blog.csdn.net/weixin_37730482/article/details/74388056?locationNum=3&fps=1 本文讲解在win ...
- Windows 下 nvm, node, npm 的下载、安装与配置
主要解决的问题 下载安装完 nvm 和 node 后,缺失 npm 文件 执行 jasmine 等命令时提示「不是内部或外部命令...」及全局变量的设置 下载与安装 一.nvm github 下载地址 ...
- Windows下配置node和npm
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.js 的使用包管理器 ...
- 基于windows下,node.js之npm
1.下载node.js一路安装下去 在开始 node文件夹下,打开cmd 2.创建一个开发目录 mkdir reactQa && cd reactQa 3.初始化一个nmp的开发环境 ...
随机推荐
- C++ Builder技巧集锦
/* 调用DOS程序时不显示窗口 使 用 ShellExecute调 用 DOS程 序 时 可 以 不 显 示 窗 口 , 如 :*/ ShellExecute(, "open", ...
- hbase删除region块的脚本
删除hbase表region块脚本 文件hua.txt格式: CHAT_INFO,1318153079100530000314050,1318173760068.991ca04ff164c3f7987 ...
- C++ 必知必会: 条款1: 数据抽象
数据抽象, 具有C语言经理的我, 原先是将其看做是一个数据的集合, 把自己常用的数据通过某种方式总结,集合起来, 使用的时候能够更加方便------其实这个还是结构体思想的延续,结构体内部包含了若干的 ...
- IOS懒人笔记应用源码
这个源码是懒人笔记应用源码,也是一个已经上线的apple应用商店的应用,懒人笔记iOS客户端源码,支持语音识别,即将语音转化成文本文字,所用语音识别类库为讯飞语音类库. 懒人笔记是一款为懒人设计的笔记 ...
- JDBC数据库连接(MySQL为例)
1.什么是JDBC?有什么作用? Java Data Base Connectivity Java数据库连接协议 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问. 他提 ...
- 转 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO
此文章为转载,如有侵权,请联系本人.转载出处,http://blog.chinaunix.net/uid-28458801-id-4464639.html 同步(synchronous) IO和异步( ...
- 《第一行代码--Android》阅读笔记之广播
广播接收器 1.注册方式 动态注册:在程序中注册,如在Activity里的onCreate()方法中注册 静态注册:在AndroidManifest.xml中注册 2.可接收哪些广播 接收系统消息 ...
- MongoDB(3):小的细节问题
1.文档 {“greeting”:“hello,world”,“foo”: 3} 文档中的键/值对是有序的,下面的文档与上面的文档是完全不同的两个文档. {“foo”: 3 ,“greeting”:“ ...
- 一个伪ajax图片上传代码的例子
一个伪ajax图片上传实现代码. 复制代码代码如下: <?php if($_FILES){ ?> <script> window.parent.ajaxUploadPi ...
- js构造函数,索引数组和属性的属性
本文主要介绍和小结js的构造函数,关联数组的实现方式和使用,及不可变对象和它的实现方式及他们使用过程中要注意的点 <script> function p(){ var len=argume ...