Create an instance of the TinyPng::Client class:

@client =

Note that this will look for the configuration file in config/tiny_png.yml. See the sample config. If you choose to not use the config file, you will need to pass in your API key in the optional hash:

@client = :api_key => 'my_api_key'

If you want to work with a list of images, and want to silently suppress exceptions, change that in the config file or pass it into the optional hash:

@client = :suppress_exceptions => true

Next, pass in the full paths to the images you want to shrink (you can also pass in whole directories)

@client.shrink '/FULL/PATH/TO/IMAGE.png'
@client.shrink '/FULL/PATH/TO/image.png', '/FULL/PATH/TO/ANOTHER/image.png', '/DIRECTORY/WITH/LOTS/OF/IMAGES'

The shrink method will return a hash of arrays letting you know which paths were successfully overwritten and which ones failed:

	:success => [
	:failure => [

Each successfully shrunken image will overwrite the original file.


For each image path analyzed (whether sent in directly or picked out of a folder):

  • There must be a file already at the specified path
  • That file must be readable and writeable
  • The file name must end in .png

Using Blacklists

There might be times where you want to shrink an entire directory, but exclude certain files. To do this, you’ll need pass a TinyPng::Path object to @client.shrink.

@paths = '/images/path'
@paths.blacklist '/images/path/blacklist.png'
@client.shrink @paths

The blacklist array takes precedence over anything else inputted into this TinyPng::Path object.

NOTE: TinyPng::Path objects are independent of each other. If you send in multiple path objects to the shrink method, the blacklist from one path object will not impact the other path object.

You can send in TinyPng::Path objects, directories, and full image paths to the shrink method, but each will be analyzed by itself and the blacklist from any path object will be self-contained.