zoukankan      html  css  js  c++  java
  • gulp多张图片自动合成雪碧图

    相信做前端的同学都做过这样的事情,为优化图片,减少请求会把拿到切好的图标图片,通过ps(或者其他工具)把图片合并到一张图里面,再通过css定位把对于的样式写出来引用的html里面。对于一些图片较多的项目,这个过程可能要花费我们一天的时间,来实现这步。今天我给大家带来一个工具,将这一步缩短到几秒钟就能完成,究竟是什么工具这么神奇呢,他就是gulp的一个插件gulp.spritesmith。下面一张图来说明他能做什么。

    看到这个图片介绍,相信大家已经对gulp.spritesmith能做到什么一目了然了,其他的不多说,下面说直接实现

     

    前期准备

    安装gulp(使用简介

    后台命令安装 gulp插件 :

    npm install --save-dev gulp.spritesmith 安装 gulp.spritesmith

     

    Gulpfile.js 文件内容

    /引入gulp
    var gulp=require("gulp"),
        spritesmith=require('gulp.spritesmith');
    
    gulp.task('default', function () {
        return gulp.src('images/*.png')//需要合并的图片地址
            .pipe(spritesmith({
                imgName: 'sprite.png',//保存合并后图片的地址
                cssName: 'css/sprite.css',//保存合并后对于css样式的地址
                padding:5,//合并时两个图片的间距
                algorithm: 'binary-tree',//注释1
                cssTemplate:"css/handlebarsStr.css"//注释2
            }))
            .pipe(gulp.dest('dist/'));
    });

    注释一:

    Algorithm 有四个可选值分别为top-down、left-right、diagonal、alt-diagonal、binary-tree

    对于如下:

     

    注释二:

    cssTemplate 是生成css的模板文件可以是字符串也可以是函数。是字符串是对于相对于的模板地址 对于模板文件样式格式是:

    {{#sprites}}
    .icon-{{name}}{
        background-image: url("{{escaped_image}}");
        background-position: {{px.offset_x}} {{px.offset_y}};
         {{px.width}};
        height: {{px.height}};
    }
    {{/sprites}}

    如果是函数的话,这可以这样写

    //引入gulp
    var gulp=require("gulp"),
        spritesmith=require('gulp.spritesmith');
    
    gulp.task('default', function () {
    
        return gulp.src('images/*.png')//需要合并的图片地址
            .pipe(spritesmith({
                imgName: 'sprite.png',//保存合并后图片的地址
                cssName: 'css/sprite.css',//保存合并后对于css样式的地址
                padding:5,//合并时两个图片的间距
                algorithm: 'binary-tree',//注释1
                cssTemplate: function (data) {
                    var arr=[];
                    data.sprites.forEach(function (sprite) {
                        arr.push(".icon-"+sprite.name+
                        "{" +
                        "background-image: url('"+sprite.escaped_image+"');"+
                        "background-position: "+sprite.px.offset_x+"px "+sprite.px.offset_y+"px;"+
                        ""+sprite.px.width+";"+
                        "height:"+sprite.px.height+";"+
                        "}
    ");
                    });
                    return arr.join("");
                }
    
            }))
            .pipe(gulp.dest('dist/'));
    });

    以上就是实现将css代码中的切片图片合并成雪碧图的实现,有问题的大家可以给我留言

  • 相关阅读:
    5G扫盲
    geohash-net实现
    AI(一):概念与资讯
    AI(二):人脸识别
    geohash基本原理
    Hue
    Kylin(三): Saiku
    【FreeMarker】Spring MVC与FreeMarker整合(二)
    【FreeMarker】FreeMarker快速入门(一)
    【Linux】Jenkins以war包运行及开机启动配置(四)
  • 原文地址:https://www.cnblogs.com/qianlitiaotiao/p/5054231.html
Copyright © 2011-2022 走看看