Node.js使用gm拼装sprite图片

 更新时间:2017年07月04日 08:50:03   作者:十年灯  
这篇文章主要介绍了Node.js使用gm拼装sprite图片的相关资料,需要的朋友可以参考下

从设计图切图得到了12个小图标,是按钮的两种状态,然后我就寻思着把他们拼成一张sprite图片.

之前用过gulp的sprite插件,但这次我不想搞的太隆重.拼图我知道有个很好用的命令行工具 GraphicsMagick 及配套的nodejs包gm

首先说下我要拼的图片,我打算将正常状态作为第1行,激活状态作为第2行.这样可以少计算一些background-position.

折腾过程比较痛苦,本来我打算看一下GraphicsMagick与gm的官方文档,结果好多生单词,最后还是放弃了.下面说答案吧:

总的来说有两种方法,

1.使用gm包的append+adjoin方法

这个方法有缺点,就是不能方便的排序成我想要的这种布局.用adjoin我实际上拼了3次图,才最终得到sprite.参考代码如下:

gm('nav1_1.png')
 .append('nav2_1.png','nav3_1.png','nav4_1.png','nav5_1.png','nav6_1.png', true)
 .adjoin().write('./result.png', function(err) {
   console.log(err);
 });
 gm('nav1_0.png')
 .append('nav2_0.png','nav3_0.png','nav4_0.png','nav5_0.png','nav6_0.png', true)
 .adjoin().write('./result1.png', function(err) {
   console.log(err);
 });
 
 gm('result1.png').append('result.png').adjoin()
   .write('nav-icons.png', (err, data) => {
     if(err) console.error(err);
     console.log(data);
   })

代码很初级.

2.使用GraphicsMagick自带的命令行工具

是直接使用GraphicsMagick的命令行(安装后,即可在命令行里使用gm命令),但这里要注意:powershell中使用gm一直报错,需要用cmd并cd到对应目录.win10自作聪明的用powershell默认代替cmd,结果连这种错误都没修复…

gm montage nav*_0.png nav*_1.png -tile 6x2 -geometry +0+0 rrr.png

可以看到我使用了 montage 方法,且分两次传入了图片(图片路径还支持glob表达式), 分两次传入图片路径可以保证先后顺序(因为我就是想拼两行啊).

简单讲一下montage,其中文表述即”蒙太奇”,高大上,但我们这里只用来拼图. 命令之后就是图片路径; 路径之后有个 `-tile` 参数, 用来指定图片的排列方式.6×2就是6列2行.这里有个技巧,如果你想让所有图片排成一行,可以这样 `-tile x1`,即不管列数,只限制为1行,反之, `-tile 1x`则表示只要1列不管有多少行.

-tile参数后是-geometry参数. 其默认值是'120×120>+4+3′,表示”每张小图的最大尺寸是120×120,大于此尺寸的会被缩放(小于的不会放大),图片之间的间隔是横向4纵向3″.

-geometry的参数是按需传的,比如我传的只是+0+0,表示不限制每张图的大小,图片间距为0.

最后一个参数,就是输出拼图结果到rrr.png了.

搞懂这些参数后, 下面的由本方法衍生出来的方法就好理解了.

3.使用gm包执行GraphicsMagick命令行

gm包本身十分强大,但它也提供了生成命令并执行的接口.如上面的命令行, 用gm包可以这么写:

gm().command('montage')
   .in('nav*_0.png')
   // 图片路径分开 in, 不要连在一个 in 里面
   .in('nav*_1.png')
   .in('-tile', '6x2')
   .in('-geometry', '+0+0')
   .write('rrrr.png', (err, a,b,c) => {
     console.log(err, 'a:', a, 'b:', b, 'c:', c);
   });

与直接使用命令行是一样的效果.但这样写成js文件后,下次要用或要发给别人用都更方便了.

相关文章

  • 使用puppeteer破解极验的滑动验证码

    使用puppeteer破解极验的滑动验证码

    这篇文章主要介绍了利用puppeteer破解极验的滑动验证功能,基本流程代码实现给大家介绍的非常详细,需要的朋友可以参考下
    2018-02-02
  • PHP和NodeJs开发的应用如何共用Session

    PHP和NodeJs开发的应用如何共用Session

    这篇文章主要介绍了PHP和NodeJs开发的应用如何共用Session的相关资料及思路,需要的朋友可以参考下
    2015-04-04
  • 更新Node.js的四种方法小结

    更新Node.js的四种方法小结

    Node.js是一个开放源代码的跨平台JavaScript运行环境,它在不同的平台上都得到了广泛使用和支持,强大的生态系统、持续的更新和不断改进的性能使得Node.js非常受欢迎,然而,更新Node.js仍然是一个必要的过程,本文给大家介绍一些有关如何更新Node.js的方法
    2023-11-11
  • node.js使用Moment.js js 时间计算方法示例小结

    node.js使用Moment.js js 时间计算方法示例小结

    这篇文章主要介绍了node.js使用Moment.js js 时间计算方法,结合实例形式分析了Moment.js js模块时间计算的常用操作技巧与相关注意事项,需要的朋友可以参考下
    2023-05-05
  • 在linux中使用包管理器安装node.js

    在linux中使用包管理器安装node.js

    这篇文章主要介绍了在linux中使用包管理器安装node.js的方法以及具体安装过程,非常详细,推荐给大家,有需要的小伙伴参考下吧。
    2015-03-03
  • NodeJS Web应用监听sock文件实例

    NodeJS Web应用监听sock文件实例

    这篇文章主要介绍了NodeJS Web应用监听sock文件实例,本文讲解 NodeJS 的 TCP 和 HTTP 监听 Domain Socket 文件例子,需要的朋友可以参考下
    2015-02-02
  • 使用socket.io实现简单聊天室案例

    使用socket.io实现简单聊天室案例

    这篇文章主要介绍了使用socket.io实现简单聊天室案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 一文详解如何使用node执行js文件

    一文详解如何使用node执行js文件

    Node.js开发者过去通常将大多数可执行命令发布为全局的软件包,以使它们处于路径中且可被立即地执行,下面这篇文章主要给大家介绍了关于如何使用node执行js文件的相关资料,需要的朋友可以参考下
    2023-01-01
  • NodeJS学习笔记之Connect中间件应用实例

    NodeJS学习笔记之Connect中间件应用实例

    前面我们介绍了几篇内容的connect中间件的基础知识,今天我们来实例应用一下,做个记事本的小应用,希望大家能够喜欢。
    2015-01-01
  • 新版Node.js内置支持.env文件使用详解

    新版Node.js内置支持.env文件使用详解

    这篇文章主要为大家介绍了新版Node.js内置支持.env文件使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09

最新评论