The Android runtime attempts to display images appropriate to the platform on which it is running. A developer can provide multiple versions of the same image with each version having a different original size. Regardless of the original image selected by the runtime, the image is ultimately rendered at the size specified by explicit or implicit constraints. This allows an app to render normal 1:1 images (“drawables”), retina-compatible 2:1 images, etc..

More information regarding Android support for varying screen sizes and densities can be found here

To scale images to different sizes I use graphicsmagick , a popular fork of the also popular imagemagick. The graphicsmagick site provides installation instructions, but if you have a mac then the easiest installation method by far is to use homebrew.

homebrew install graphicsmagick

Example of scaling an image, assume that the original image is larger and the image is being scaled down:

gm convert soccer_ball.png -resize 112x112 soccer_ball2.png

Example of changing the image background to a transparent background:

gm convert soccer_ball.png -background none soccer_ball2.png

Android project folder layout for resources:

Directory Density
src/main/res/drawable-hdpi High
src/main/res/drawable-mdpi Medium
src/main/res/drawable-xhdpi Extra High
src/main/res/drawable-xxhdpi Extra Extra High