npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

grunt-render-adaptive-icon

v1.1.2

Published

Grunt plugin for rendering backwards compatible images from Android adaptive icons

Downloads

5

Readme

grunt-render-adaptive-icon

Grunt plugin for rendering backwards compatible images from Android adaptive icons

Grunt

If you haven't used Grunt before, be sure to check out the Getting Started guide, as it explains how to create a Gruntfile as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:

npm install grunt-render-adaptive-icon --save-dev

One the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:

grunt.loadNpmTasks('grunt-render-adaptive-icon');

The "rendericon" task

Overview

In your project's Gruntfile, add a section named rendericon to the data object passed into grunt.initConfig().

grunt.initConfig({
    rendericon: {
        android_icons: {
            options: {
                    foreground: 'example/template/foreground.png',
                    background: 'example/template/background.png',
                    mask: 'example/template/mask.png',
                    shadow: 'example/template/shadow.png',
                    crop: { width: 768, height: 768, left: 128, top: 128 }
            },
            files: [
                    { width: 36, height: 36, dest: 'example/output/ldpi-icon.png' },
                    { width: 48, height: 48, dest: 'example/output/mdpi-icon.png' },
                    { width: 72, height: 72, dest: 'example/output/hdpi-icon.png' },
                    { width: 96, height: 96, dest: 'example/output/xhdpi-icon.png' },
                    { width: 144, height: 144, dest: 'example/output/xxhdpi-icon.png' },
                    { width: 192, height: 192, dest: 'example/output/xxxhdpi-icon.png' },
                    { width: 512, height: 512, dest: 'example/output/google-play.png', mask: false, crop: { width: 720, height: 720, left: 152, top: 152 }  }            
            ]
        }
    }
})

This plugin can be used to automatically generate backwards compatible versions of an Android adaptive icon. Adaptive icons consist of a foreground image and a background image which will be composited on top of each other. Different variants of Android will then use different shapes to cut out the actual icon. One variant might use circular icons, another squares, squares with rounded corners or squircles. See for more infomation the Android developer website.

For backwards capatibility it may be needed to also provide a regular old icon in various sizes. This plugin will automate that process.

Example of process

In the first step a) the foreground will be composited on top of the background. In the next step b) the mask will be used to cut out the shape of the icon. In this case it will be a rounded rect. During step c) the resulting icon will be composited on top of the shadow. The next step is d) where the image will be cropped which results in our final icon, which will be scaled (e) to all the sizes specified.

Uniform icons for the Play Store

In addition to these backwards compatible versions of the adaptive icon, we can also use the orignal icon assets to create a new Uniformed icon for the Play Store.

Uniformed icons that are submitted to the Play Store must be 512 x 512 pixels large and must not have a predefined shape. Instead it must be a square without any shadows. The Play Store will apply it's own rounded mask and shadow to ensure consistency across all app icons in the store.

In the last example of the configuration above you'll notice we are generating a 512 x 512 pixel version of the icon with masking turned off. We also use a slightly tighter crop compared to the other icons to make sure our artwork is properly sized.

Configuration options

options.foreground

Type: String

The foreground image for the adaptive icon. It would be best to use large version of the adaptive image as a base, for example 1024 x 1024 as we can use that scale down to all required sizes of icons while still maintaining a crisp image.

options.background

Type: String

The background image for the adaptive icon. It needs to be the same size of the foreground image.

options.mask

Type: String

An image that will be used as a mask to cut out the icon in a particular shape. It needs to be the same size of the foreground image. The image needs to be transparent, with solid black for the area of the icon. An example image is provided in this repository. It needs to be the same size of the foreground image.

options.shadow

Type: String

An image that will be used to add a shadow behind the icon, if needed. An example image is provided in this repository.

options.crop

Type: Object

Because adaptive icons contain extra space outside of the main safe area, the rendered icon needs to be cut to size. This object will contain width, height, top and left to determine the area that needs to be cut out. This area depends on the mask image that is provided.

Files

A set of output file that will be generated from the source file. For each file the following settings can be defined:

file.width

Type Number

The width of the output image.

file.height

Type Number

The height of the output image.

file.dest

Type: String

The path and name of the output file for that will be generated for this particular size.

file.mask

Type: String or Boolean

Overwrite the mask option for an individual output file. Can be false to turn off masking for this file. This is especially useful to generate a new uniformed icon asset for the Play Store.

file.shadow

Type: String or Boolean

Overwrite the shadow option of an individual output file.

file.crop

Type: Object

Overwrite the crop option of an individual output file.