Code Monkey home page Code Monkey logo

grunt-imagine's Introduction

grunt-imagine

Use @cowboys js based optimizer grunt to optimize (and or inline) your projects image resources.

Build Status

Getting Started

Plugin installation

Install this grunt plugin next to your project's [grunt.js gruntfile][getting_started] with: npm install grunt-imagine

Then add this line to your project's grunt.js gruntfile.

grunt.loadNpmTasks('grunt-imagine');

Installation of third party tools

If you want to use the pngmin, jpgmin, gifmin or pngnq tasks, you need to have some third party tools installed & in your global PATH:

It is enough if you have one tool per task installed, but if you provide more of them, grunt-imagine will recognize that and will try to use them, if they´ll help to shrink the filesize.

Note: I will add more tools to the chain in the future, if you would like to see a tool in image, ping me.

PNG tools:

GIF tools:

JPEG tools:

PNGQUANT tools:

Resources

Documentation

pngmin task

If you would like to shrink the size (lossless) of your *.png files, set up a src description, where to find your original *.png files and a directory where you would like to store your optimized files.

The task will take the original directory setup from your src directories, and will copy them over (even for subdirs).

Warning! If the dest property is set equally to your src directory, imagine will override your files!

pngmin: {
  src: [
    'src/*.png',
    'src/img/*.png'
  ],
  dest: 'build'
}

gifmin task

If you would like to shrink the size (lossless) of your *.gif files, set up a src description, where to find your original *.gif files and a directory where you would like to store your optimized files.

The task will take the original directory setup from your src directories, and will copy them over (even for subdirs).

Warning! If the dest property is set equally to your src directory, imagine will override your files!

gifmin: {
  src: ['src/**/*.gif'],
  dest: 'build'
}

jpgmin task

If you would like to shrink the size (lossless) of your *.jpg files, set up a src description, where to find your original *.jpg files and a directory where you would like to store your optimized files.

The task will take the original directory setup from your src directories, and will copy them over (even for subdirs).

Warning! If the dest property is set equally to your src directory, imagine will override your files!

jpgmin: {
  src: ['src/**/*.jpg'],
  dest: 'build'
}

pngnq task

If you would like to quantizize your PNG images in RGBA format, set up a src description, where to find your original *.png files and a directory where you would like to store your optimized files.

The task will take the original directory setup from your src directories, and will copy them over (even for subdirs).

Warning! If the dest property is set equally to your src directory, imagine will override your files!

pngnq: {
  src: ['src/**/icons*.png'],
  dest: 'build'
}

inlineImg task

If you would like to inline your images (data:uri/base64) in your *.css or *.png files, you can use the inlineImg task, just add a src, where imagine can find your *.css and/or *.html files.

If you use absolute paths, use the base property to tell imagine, where it can find your images.

If you set the ie8 flag to true, only images smaller than 32kb will be inlined.

inlineImg: {
  src: ['src/**/*.css', 'src/**/*.html'],
  ie8: true,
  base: 'build/img',
  dest: 'build'
}

sprites (multi)task

Imagine provides the ability to generate sprite maps and the corresponding css files. At the moment, only *.png files can be processed.

  sprites: {
      icons36: {
          src: ['src/img/icons36/*.png'],
          css: 'src/css/icons36.css',
          map: 'src/img/icons36.png'
      }
  }

This configuration will generate an image named icons36.png in the 'src/img' folder, which contains all of the *.png images found in the 'src/img/icons36/' folder.

Given that two matching images were found in the'src/img/icons36/' folder, named 'MyImage1.png' and 'MyImage2.png', the generated css file would look like this:

.MyImage1, .MyImage2 {
    background: url("../img/icon36.png") no-repeat;
}

.MyImage1 {
    background-position: 0 -432px;
}

.MyImage2 {
    background-position: 0 -396px;
}

Additionally you can add a css class prefix:

  sprites: {
      icons36: {
          src: ['src/img/icons36/*.png'],
          css: 'src/css/icons36.css',
          map: 'src/img/icons36.png',
          classPrefix: 'Icon'
      }
  }

which would generate smth. like this:

.Icon-MyImage1, .Icon-MyImage2 {
    background: url("../img/icon36.png") no-repeat;
}

.Icon-MyImage1 {
    background-position: 0 -432px;
}

.Icon-MyImage2 {
    background-position: 0 -396px;
}

The images will be sprited vertically, so you might need to set up some margin to give´em some space:

  sprites: {
      icons36: {
          src: ['src/img/icons36/*.png'],
          css: 'src/css/icons36.css',
          map: 'src/img/icons36.png',
          classPrefix: 'Icon',
          margin: 15
      }
  }

Now you´re images will be places with 15 px of space between them.

This task doesn´t depend on any external libraries, except for PhantomJS, which the most of you should have installed if you´re using grunt.

Future (TODO)

  • Better documentation (Near future!)
  • JS only PNG optimizing
  • More JPG, PNG, GIF tools (ping me, if you knew good ones)
  • Using remote services alternativly (smush.it, tinypng.org)
  • GIF to PNG conversion (if smaller)

Release History

0.2.0

  • Added basic spriting feature (for pngs)

0.1.3

  • Added jpegrescan
  • Fixed bug related to issue #6 (output file is bigger than input)

0.1.2

  • Added jpegoptim
  • Fixed gifsicle cmd argument failure

0.1.1

  • Fixed pngnq cmd argument failure

0.1.0

  • Initial Release (jpgmin, gifmin, pngmin, inlineImg, pngnq)

License

Copyright (c) 2012 asciidisco
Licensed under the MIT license.

grunt-imagine's People

Contributors

asciidisco avatar i-akhmadullin avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.