Node.js使用gm拼装sprite图片


Posted in Javascript onJuly 04, 2017

从设计图切图得到了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文件后,下次要用或要发给别人用都更方便了.

Javascript 相关文章推荐
使用jquery自定义鼠标样式满足个性需求
Nov 05 Javascript
jQuery选择器源码解读(七):elementMatcher函数
Mar 31 Javascript
详细解密jsonp跨域请求
Apr 15 Javascript
jQuery实现仿百度首页滑动伸缩展开的添加服务效果代码
Sep 09 Javascript
javascript伸缩菜单栏实现代码分享
Nov 12 Javascript
jQuery无缝轮播图代码
Dec 22 Javascript
使用bat打开多个cmd窗口执行gulp、node
Feb 17 Javascript
JavaScript中Promise的使用详解
Feb 26 Javascript
angular实现input输入监听的示例
Aug 31 Javascript
Angularjs之ngModel中的值验证绑定方法
Sep 13 Javascript
react中使用css的7中方式(最全总结)
Feb 11 Javascript
react用Redux中央仓库实现一个todolist
Sep 29 Javascript
JavaScript中document.referrer的用法详解
Jul 04 #Javascript
基于hover的用法实例(推荐)
Jul 04 #Javascript
js学习总结_基于数据类型检测的四种方式(必看)
Jul 04 #Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
Jul 04 #Javascript
javascript 初学教程及五子棋小程序的简单实现
Jul 04 #Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 #Javascript
JS全角与半角转化实例(分享)
Jul 04 #Javascript
You might like
joomla内置的表单验证功能使用方法
2010/06/11 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
destoon之一键登录设置
2014/06/21 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
PHP双向链表定义与用法示例
2018/01/31 PHP
基于jquery的气泡提示效果
2010/05/31 Javascript
javascript开发技术大全 第4章 直接量与字符集
2011/07/03 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
jquery datepicker参数介绍和示例
2014/04/15 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
javascript 使用for循环时该注意的问题-附问题总结
2015/08/19 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
微信小程序 转发功能的实现
2017/08/04 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
详解JWT token心得与使用实例
2019/08/02 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
Python Trie树实现字典排序
2014/03/28 Python
Python如何快速实现分布式任务
2017/07/06 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
Python 动态导入对象,importlib.import_module()的使用方法
2019/08/28 Python
tensorflow自定义激活函数实例
2020/02/04 Python
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
教师专业理论水平的自我评价分享
2013/11/09 职场文书
大四学生找工作的自荐信
2014/03/27 职场文书
新年寄语大全
2014/04/12 职场文书
项目工作说明书
2014/07/29 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
2015年复活节活动总结
2015/02/27 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
教你怎么用Python处理excel实现自动化办公
2021/04/30 Python