TinyPNG est un service en ligne de compression d'image qui utilise une algorithme de compression vachement efficace.
Comme le service est bien conçu, ils ont même une API disponible en JS, PHP, PHP Curl, Python, Ruby et C#. Avec une clef gratuite, vous pouvez traiter 500 images par mois, sans limite de poids.

Du coup, à l'aide du module tinify, il est rapide de compresser une image donnée :

# coding: utf-8
import os.path
import sys

import tinify

tinify.key = 'API_KEY'

try:
    infile = sys.argv[1]
except IndexError:
    print('Usage:', sys.argv[0], 'FILENAME')
    exit(1)

outfile = os.path.splitext(infile)[0] + '-opti.png'

# C'est ici que tout se joue
tinify.from_file(infile).to_file(outfile)

diff = os.path.getsize(outfile) - os.path.getsize(infile)
if diff < 0:
    os.rename(outfile, infile)
    print(infile, '->', diff, 'octects')
else:
    os.remove(outfile)

Et l'alias qui va bien :

alias optimisation-png='for file in *.png; do python3 /chemin/vers/optipng.py "$file"; done'

Historique

  • 2018-04-20 : Utilisation du module tinify.