TinyPNG uses smart lossy compression techniques to reduce the file size of your WEBP, JPEG and PNG files. By selectively decreasing the number of colors in the image, fewer bytes are required to store the data. The effect is nearly invisible but it makes a very large difference in file size!
TinyPNG has web app that allows us to compress images(up to 20 images & max 5MB each). That is useful but we sometimes need to compress more than 20 images.
The great thing is that TinyPNG has API and packages for multiple languages.
TinyPNG Developer API
In this post, I will show you how to use the API with python.
Step1. GET API Key
Step2. Install pip package
Step3. Write a script (less 20 lines)
Step4. Run the script
Go to https://tinypng.com/developers and type your name and email address. You will get the API key easily.
pip install tinify
Adding try except is good 😜
The script is super simple. create a
src for source images and
dist for optimized images.
Get file names by
glob and pass image files to TinyPng API with
You can pass an image file as buffer or image url instead of an image file path.
with open("unoptimized.jpg", 'rb') as source: source_data = source.read() result_data = tinify.from_buffer(source_data).to_buffer()
source = tinify.from_url("https://tinypng.com/images/panda-happy.png") source.to_file("optimized.png")
import tinify from glob import glob import os.path tinify.key = "your_api_key" source_dir_name = 'src' destination_dir_name = 'dist' # get all files names in directory files = glob(source_dir_name + '/*') # compress all files for file in files: print('compressing ' + file) source = tinify.from_file(file) file_name, ext = os.path.splitext(file) file_name = file_name.replace(source_dir_name + '/', '') source.to_file(destination_dir_name + "/" + file_name + ".png") print('compressed all images')
Before running the script, we need 2 small things.
First, create two directories(src and dist). If you don't like these dir names, you can change whatever you like.
$ mkdir src dist
Then, moving image files you want to compress to
Finally, run the script!
$ python app.py compressing src/MoreToggles.css.png compressing src/CSSscrolshadows.jpg compressing src/CSStoTailwindCSS.png compressing src/broider.png compressing src/Tailblocks.jpg compressing src/calcolor.jpg compressing src/screenshot-rocks.png compressing src/SmoothShadow.png compressing src/Neumorphism.io.png compressed all images
image compress script with tinypng api
how to use
$ git clone https://github.com/koji/tinypng_image_compress.git $ cd tinypng_image_compress # move images to `src` folder $ python app.py
- image compress
- image resize
Generally, you can reduce 20-50% of an image file size.
If you like to use more functionality easily, I recommend you to check this article.