前身是css-sprite,前几天帮新同事搭建环境,意外发现sprity在window下可以安装成功了,同时也发现node版本已经4点几了,自己电脑的版本还停留在0.10,赶紧把自己的node升级到最新版本,win10下,sprity安装成功,可以使用。

在这里介绍下sprity顺便提下自己遇到的问题。

介绍

sprity,一个模块化的雪碧图生成工具,会根据目录中的图片生成相应的雪碧图和样式文件,支持retina图,可以内嵌base64 编码格式的图,支持不同的图片格式和有不同的图片引擎可以选择。

安装使用

通过npm安装

npm install sprity --save

也可以全局安装使用

npm install sprity -g

结合gulp使用,也可以用grunt,这里说下gulp的用法:

var gulp = require('gulp');
var gulpif = require('gulp-if');
var sprity = require('sprity');// 创建sprites任务
gulp.task('sprites', function () {return sprity.src({src: './src/images/**/*.{png,jpg}', //需要进行合并的图片路径style: './sprite.css',              //生成的样式文件名和格式,可以生成scss// 还有很多其他参数,如指定模板、图片格式、前缀、名称和图片合并的方向等,具体可以查看sprity的github内容processor: 'sass', // 生成的样式格式}).pipe(gulpif('*.png', gulp.dest('./dist/img/'), gulp.dest('./dist/css/')))
});

配置好options,把图片放进目录中,运行gulp sprites,就可以生成对应的雪碧图和样式文件了。

sprity支持三种图片引擎,sprity-lwip、sprity-canvas和sprity-gm。默认使用的是sprity-lwip,好像lwip需要重新编译node-gyp什么的,所以当时我还是win7系统的时候,经常会报错,无法编译成功。另两个没试过,不展开说,有兴趣的可以去试着使用下。

模板

sprity采用handlebar来处理模板,已经写好有模板案例可以参考,sprity-css

图片引擎

鉴于sprity-lwip在windows下很难部署,太难安装成功了。所以我尝试了其他的引擎,sprity-canvas也很难安装成功,最后唯有靠sprity-gm了,这个需要依靠GraphicsMagick和Imagemagick,我尝试只安装其中某一个,发现不行,一定得两个都安装。

自己搜索引擎找到官网下载,然后安装,重启电脑,对,要重启才有用,不然会报错。

接着安装sprity-gm

npm install sprity-gm

然后在gulp的任务中加上参数配置:

engine: 'gm',
format: 'png', // because sprity name it with uppercase: https://github.com/sprity/sprity/issues/28
'gm-use-imagemagick': true

就可以了。

问题

使用途中,我遇到一个问题无法解决,一个gulp任务里面,我想同时分开生成多张雪碧图,不知道为什么生成的图和样式会合并在一起。

例如,我这样写:

gulp.task('sprites', function () {sprity.src({src: '/img/icon/*.png',style: '_icon.scss',format: 'png',orientation: 'left-right',template: './sprity-css.hbs',processor: 'scss',prefix: 'icon',name: 'icon'}).pipe(gulpif('*.png', gulp.dest('/img/'), gulp.dest('/css/')));sprity.src({src: topicType + '/img/bg/*.png',style: '_bg.scss',format: 'png',orientation: 'left-right',template: './sprity-css.hbs',processor: 'scss',prefix: 'bg',name: 'bg'}).pipe(gulpif('*.png', gulp.dest('/img/'), gulp.dest('/css/')));
});

最后生成两张图片:icon.png和bg.png,两个样式文件:_bg.scss和_icon.scss,这样没错,可以icon的图片和样式里面包含有bg的图片和样式:

_icon.scss:

.bg {background-image: url('#{$icon-sprite-path}/bg.png');}.bg-btn-tg {background-position: -526px -196px;width: 80px;height: 32px;}
.icon {background-image: url('#{$icon-sprite-path}/icon.png');}.icon-btn-tg {background-position: -510px -280px;width: 80px;height: 32px;}

_bg.scss:

.bg {background-image: url('#{$icon-sprite-path}/bg.png');}.bg-btn-tg {background-position: -526px -196px;width: 80px;height: 32px;}

我不确定是gulp流的问题,还是模板的问题,因为模板循环的是一个数组来的。
sprity-css.hbs:

{{#each layouts}}{{#each sprites}}{{#if dpi}}@media (-webkit-min-device-pixel-ratio: {{ratio}}), (min-resolution: {{dpi}}dpi) {{{/if}}.{{cssesc ../classname}} {background-image: url('{{escimage url}}');{{#if dpi}}background-size: {{baseWidth}}px {{baseHeight}}px;{{/if}}}{{#if dpi}}}{{/if}}{{/each}}{{#each layout.items}}.{{../classname}}-{{meta.name}} {background-position: -{{baseDim x}}px -{{baseDim y}}px;width: {{baseDim width}}px;height: {{baseDim height}}px;}{{/each}}
{{/each}}

20151201更新
sprity修复了同时合并多张图片会重叠的bug,当时也想过试下能不能修改,然技术太渣,不知道哪里修改。
原因好像是sprity会从同一个节点处理多个png流,以致默认的layout成为包罗万象的每一个png图像,英语太渣。
其实就是把一个变量改下就可以了。现在可以同时合并多张图片了。
修复问题的commit


20160227更新
新的sprity-css.hbs:

{{#each layouts}}{{#each layout.items}}${{meta.name}}: -{{x}}px -{{y}}px {{meta.width}}px {{meta.height}}px;{{/each}}@mixin sprite-width($sprite) {width: nth($sprite, 3);}@mixin sprite-height($sprite) {height: nth($sprite, 4);}@mixin sprite-position($sprite) {$sprite-offset-x: nth($sprite, 1) - 4;$sprite-offset-y: nth($sprite, 2) - 4;background-position: $sprite-offset-x $sprite-offset-y;}{{#each sprites}}@mixin sprite-{{name}}() {background-image: url('#{$icon-sprite-path}/{{name}}.png?v=#{$version}');}{{/each}}@mixin sprite($sprite) {@include sprite-position($sprite);@include sprite-width($sprite);@include sprite-height($sprite);}{{#each sprites}}.{{name}} {background-repeat: no-repeat;overflow: hidden;border: none;background: url('#{$icon-sprite-path}/{{name}}.png?v=#{$version}');@include inline-block();vertical-align: middle;font-style: normal;}{{/each}}{{#each layout.items}}.{{meta.name}} {@include sprite(${{meta.name}});}{{/each}}
{{/each}}

雪碧图工具sprity(20151201更新修复了同时合并多张图的bug)相关推荐

  1. MATLAB代码: 合并两张图

    MATLAB 合并两张图,要求大小相同的图,我这里合并两张相同的图. image = imread('docia_one.png') %读取图片 c = [image, image] %图像拼接到矩阵 ...

  2. 百度、高德、腾讯、天地图、谷歌、必应地图切片切图工具 MapCutter(旧名MapTiler),支持超大图、高清切片、webgl、leaflet、maptalk、openlayers、cesium等

    # MapCutter 地图覆盖图瓦片地图(金字塔图)切图工具,支持百度.腾讯.高德.天地图.谷歌.必应地图等,是市面上最易使用的同类软件.. 百度.高德.腾讯.天地图.谷歌.必应等自定义地图/图片叠 ...

  3. 一个好用的在线思维导图工具,拥有灵感快速画出精品思维导图

    一般情况下绘制思维导图有两种方法,一种是手绘,另一中是使用思维导图工具, 在线思维导图模板优点是不用下载,在迅捷思维导图中选择好模板便可直接打开使用再次编辑,不用考虑格式和软件安装的问题. 工具: 迅 ...

  4. 蓝湖怎么切图标注_【蓝湖指北】一张图教你如何选择标注尺寸

    蓝湖的标注.切图功能广受好评,正确选择标注尺寸,让设计师与工程师的沟通和协作事半功倍.本期[蓝湖指北],湖湖将手把手教你如何选择标注尺寸. Step 1 :将设计图上传至蓝湖 上传设计图至蓝湖,单击设 ...

  5. python多图合并成一张图_python使用PIL实现多张图片垂直合并

    本文实例为大家分享了python实现多张图片垂直合并的具体代码,供大家参考,具体内容如下 # coding: utf-8 # image_merge.py # 图片垂直合并 # http://www. ...

  6. Java,图片添加二维码和文字水印,合并为一张图

    在工作中遇到了要把两张图片合并成一张图片的情况,具体场景是用户头像➕二维码➕背景图 本着不重复造轮子的想法,搜索了hutool的utils包,还真让我找到了一个cn.hutool.core.img.I ...

  7. vue 签署文件两张图合并成一张图 h5页面转换成图片并长按保存在本地

    在做让用户在页面签名并把当前页面保存为图片,附上完整代码 (直接复制代码,更改接口地址或删除接口逻辑可直接复用) **准备工作:安装   npm install vue-esign --save 全局 ...

  8. 这几张图告诉你程序员的变化,最后一张图扎心了

    编程语言的变化 键盘的变化 IE的变化 WEB开发员状态的变化 编程的变化 悟性的变化 头发的变化

  9. python多图合并成一张图_将现有的图形合并成一个图形PYTHON的pdf格式

    我找不到对我有用的解决办法.在 我有一些已经存在的数字,我创建了早些时候,想把他们合并到一个pdf横向页面.图形文件是标准的matplotlib savefig的as.png.在 那么,我怎样才能简单 ...

最新文章

  1. 2020知到python语言应用答案_2020年知到APPPython语言应用第四单元章节测试答案
  2. linux 串口 read 超时,请教linux串口问题!read读取时buf里只读取到8的倍数?
  3. python读取指定页docx内容_Python读取指定目录下指定后缀文件并保存为docx
  4. SQL Server-【知识与实战VII】存储过程(上)
  5. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
  6. java hssfworkbook 乱码_java各种乱码汇总
  7. 基于OpenCV与 ImageAI 的动漫人物识别
  8. python火柴人打架代码_两个火柴人对打动画 如何制作两个火柴人打架的动画效果?...
  9. 如何给电脑版QQ、微信、爱奇艺设置代理
  10. 《VoIP技术构架(第2版·修订版)》一 第2章 企业电话的今天
  11. HP Proliant DL360 Gen9服务器开箱
  12. 去除Multiple markers at this line - advised by提示
  13. matlab中screen函数,13 PTB Screen 函数
  14. 解决oracle 报 ORA-20000(ORU-10027)错误的方法
  15. antd table分页,关于react的antd表格分页的问题
  16. Android游戏: 连连看
  17. 一个简单的字符串,为什么 Redis 要设计的如此特别
  18. OpenGL教程8(Bang翻译Delphi版)-如何制作立体透明效果 .
  19. 使用micropython(ESP8266、ESP32)驱动SES 2.66寸墨水屏显示中文
  20. 抵制日货(经典FLASH(转))

热门文章

  1. el图片滚动_element的el-table中记录滚动条位置的示例代码
  2. java多线程 生产者消费者_java多线程之-生产者与消费者
  3. android 6.0 获取手机号,头条小程序获取手机号码,回调未执行,导致无法获取手机号码...
  4. liunx 学习笔记-wzq
  5. C++_类和结构体所占内存大小,静态成员问题
  6. 弹出查看图片_报表工具如何实现“点击查看原图”
  7. mac玩rust用什么画质_玩七日杀Steam游戏用什么加速器?电狐加速器
  8. 基于注解的 IOC 配置
  9. iOS 中socket的总结
  10. 时间序列预测---差分自回归移动平均模型(ARIMA模型)