TinyPNG is a website specialize in PNG and JPEG files compression technology. This is useful when your app or website host many images and you want to reduce the file size.

TinyPNG ‘s Python library is extremely easy to use. The only thing I wish the API can improve is the compression speed or being able to compress multiples images using threading or multiprocessing. Many large companies such as Samsung, Sony, Lego, Airbnb all use TinyPNG to compress the image files


Images uploaded with API Price per unit
First 500 images per month free
Next 9,500 images $0.009
After 10,000 images $0.002

Suppose you compressed 1,000 images using the API, the first 500 images are free, and the remaining 500 images are charged at $0.009 per image, so you will pay $4.50 in the billing cycle.

Step 1. Sigh up for an account (get the API Key)

Sigh up link: https://tinypng.com/developers

Once you signed up for a TinyPNG account, you can locate your API key by logging into your account, and click API under Products section.

Step 2. Install tinify Python library

<strong>pip install --upgrade tinify</strong>

Step 3. Follow the tutorial

Source Code:

import os
import tinify

def compress_image(image_source, output_file_path):
        image_file_name = os.path.basename(image_source)
        if image_source.startswith('https'):
            source = tinify.from_url(image_source)
            source = tinify.from_file(image_source)
        print('{0} compressed successfully'.format(image_file_name))        
    except tinify.errors.AccountError:
        print('Invalid API Key')
        return False
    except tinify.errors.ConnectionError:
        print('Please check your internet connection')
        return False
    except tinify.errors.ClientError:
        print('File tpye is not supported')
        return False
        # export compressed image file
        print('File exported to {0}'.format(output_file_path))
        return True

image_folder = os.path.join(os.getcwd(), 'Images')
output_folder = os.path.join(os.getcwd(), 'Outputs')

file1 = os.path.join(image_folder, 'rocky.jpg')
file2 = os.path.join(image_folder, 'thumbnail.png')
file3 = 'https://live.staticflickr.com/2861/32837141013_3e8f61402b_o_d.jpg'

tinify.key = API_KEY
compress_image(file1, os.path.join(output_folder, '1.jpeg'))
compress_image(file2, os.path.join(output_folder, '2.jpeg'))
compress_image(file3, os.path.join(output_folder, '3.jpeg'))