Logiciel de compression d'image

Ben ces logiciels en ligne de commande peuvent être utilisés dans un script shell Windows (command com, Powers Shell, voire Bash pour Windows 10).

Oui, mais on en revient au même pour @Kip , enfin j’imagine.

Qu’il doivent utiliser Python & Cie (donc avec les installations, etc.) ou un soft comme irfanView via la ligne de commande, ça ne change pas grand chose pour lui.

Ben si, pas besoin de Python.

@Kip viens nous faire un vrai cahier des charges :grin:

1 « J'aime »

Merci pour les réponses supplémentaires. Je crois que je vais en rester là, le script de @Xerto marche bien et j’arrive à le customiser comme je veux. Bon, impossible de trouver une solution automatisée pour mettre le tout dans la zone de notification donc je suis finalement passé par RBTray : je devrais faire un clic droit au démarrage du PC mais ça va c’est light, comparé à la situation de départ.

J’ai parlé un peu trop vite. Le script a un comportement étrange sur un cas particulier : je prend des photos via mon smartphone et ces photos sont ensuite envoyées dans un dossier sur un cloud. Ensuite les photos arrivent sur mon PC dans un dossier de façon automatique, via une synchronisation. Et là, lorsqu’une photo s’ajoute, le script ne se déclenche pas. Quelle est la subtilité ? @Xerto peut-être ?

C’est bien du .jpg (et non du jpeg ou png)?

Oui. J’ai réalisé des tests sur une même image et chaque fois, celle qui provient du cloud n’est pas prise en compte par le script.

Est-ce que le cloud ne place pas un « placeholder » avant de télécharger la photo ?
Pour eviter le placeholder :

from PIL import Image

img = Image.open('path/to/img')
if img.format == 'JPEG':
   print ('jpg')

Tu peux tester en augmentant le wait_time_between_checks pour laisser le temps à la photo d’arriver.

Peut-être rajouter un test sur le poids de la photo avant de l’ajouter à la liste des images à tester.

import os
minSize = 50000

def get_images_since(last_mod_time):
    imgs = []
    for f in os.listdir(folder_to_watch):
        full_path = os.path.join(folder_to_watch, f)

        if full_path.lower().endswith('jpg')\
                and full_path not in last_compressed_pics \
                and os.stat(full_path).st_size > minSize \
                and datetime.datetime.fromtimestamp(os.stat(full_path).st_ctime) > last_mod_time:
            imgs.append(full_path)
    return imgs

Y a toutes les chances que ce soit ça en effet.
Dommage que y ait pas un truc du type de incron sur Windows, ça serait plié en 5 min, incrond qui check sur un dossier tous les IN_CLOSE_WRITE, balance le fichier qui vient d’être écrit à un compresseur en ligne de commande, fini.
Donc point obligatoire « solution GZ », installe Linux :stuck_out_tongue:

Edit : pour être un peu plus constructif on dirait qu’il y a bien une API de .NET qui s’appelle FileSystemWatcher qui fait ce genre de choses, mais faut quand même se taper un peu de code en C# puis créer un service qui exécute le code, c’est largement pas aussi direct que sous Linux.

Boah, c’est pas vraiment compliqué non plus.

une tache planifiée sous windows toutes les minutes, ca ferait le job aussi :slight_smile:
pas vraiment besoin dans son besoin d’une réactivité de ouf à la présence d’un fichier :slight_smile:

@Ewi Le script se lance et s’arrête aussitôt lorsque j’ajoute le morceau pour éviter le placeholder (j’ai bien modifié le chemin des images). Il faut faire quelque chose d’autre en particulier ?

J’ai pensé à une autre solution : déplacer les images qui arrivent dans le dossier cible du cloud vers un autre dossier (pour éviter le placeholder). J’ai testé avec un .bat, ça marche. En Python, j’ai réussi à bricoler un script qui fait la même chose, en continu :

import shutil
import os
import time
    
source_dir = 'C:/Users/Kip/Desktop/source'
target_dir = 'C:/Users/Kip/Desktop/target'
    
while True:
    file_names = os.listdir(source_dir)
    if(file_names):
        print("Fichier trouvé, déplacement..")
        for file_name in file_names:
            old_path = os.path.join(source_dir, file_name)
            new_path = os.path.join(target_dir, file_name)
            shutil.move(old_path, new_path)
            print("Fichier {0} déplacé vers {1}".format(old_path, new_path))
    time.sleep(2)

Maintenant j’aimerais rassembler les deux scripts, celui qui compresse les images et l’autre qui les déplace. Sauf que quand je réunis les deux, seul la partie qui déplace les fichiers semble fonctionner. Pourquoi ? Les deux scripts rassemblés :

Je peux pas tester mais je dirai que ton premier while True qui s’occupe du déplacement empêche le script d’entrer dans le deuxième qui s’occupe de la compression.

Lundi j’ai une journée visio-inutile… je regarderai plus en détail. Les images viennent de quel fournisseur de cloud ?

Je vois, donc il faut englober tout le reste aussi dans le while ? Les images proviennent de Mega.

Si tu as un compte Dropbox, tu as ça aussi :

J’utilise ce soft depuis mille ans!
Que ce soit pour visualiser mes jpg ou pour faire des resizes rapides.

Je n’ai jamais pensé à regarder ce qu’il etait possible de faire avec les lignes de commandes par contre…

Ce sujet a été automatiquement fermé après 730 jours. Aucune réponse n’est permise dorénavant.