Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Prétraitement et mise à jour automatisée des images préparées

De AJLSM
Aller à la navigation Aller à la recherche

Introduction

Un nouveau script permet de générer automatiquement l'ensemble des versions des images préparées. Il est aussi capable de mettre à jour les images préparées lorsque l'image originale change.

Ce script est disponible sur le SVN à l'emplacement @pleade-libre-sdx-2.5/script-pre-traitement/ImagePretraitement/ImagePretraitement.jar


Notice :
Sur les serveurs en production, le script est toujours programmé via le crontab de l'utilisateur administrateur de Pleade. Cette information est importante pour pouvoir trouver l'emplacement des log dans n'importe quel serveur..

Principe de fonctionnement

Il s'agit d'un script java qui se lance avec la commande java -jar (compatibilité java >= 6). Pour l'automatiser complètement, il faut l'enregistrer dans le crontab.

Le script offre les fonctionnalités ci-dessous:

  • Création des versions miniature (60x60), vignette (300x300) default (2500x2500) et hidef (taux de compression 45%).
  • Regénération des images pré-taritement dont l'image originale a été mise à jour.
  • Possibilité d'utiliser vips ou imageMagick (par défaut) pour le traitement.
  • Possibilité de supprimer les images préparées pour lesquels l'image originale n'existe plus.
  • Création et journalisation des log. Possibilité de spécifier le nombre de jours de log à conserver

Exécution du script

Le script se lance de cette façon :

java -jar imagesPretraitement.jar <python> '<racines>' <pretrait> '<formats>' <vips> <delete> <logFile> <nbDaysForLog>

* <python> : emplacement absolue du script python plus. Exemple: /home/mdia/pretraitement_images_plus.py
* <racines> : entre cote, la liste des racines d'images séparée par ; . Exemple : '/home/test-images;/home/mdia/test-images2'
* <pretrait> : emplacement absolue du répertoire image préparées. Exemple : /home/mdia/test-images-preparees
* <formats> :  entre cote, la liste des formats d'images préparées à générer séparée par ; . Exemple : 'default;vignette;hidef'
* <vips> : si true travail avec vips. Sinon, travail avec imageMagick
* <delete> : Si true le script supprime les images préparées dont l'image original n'existe plus. Si false, le script indique juste les images préparées à supprimer sans rien faire.
* <LogFile> : Emplacement absolue du ficheir de log.
* <nbDaysForLog> : nombre de jours de log à conserver

Exemple d’exécution du script:

java -jar ImagePretraitement.jar /home/mdia/pretraitement_images_plus.py '/home/mdia/test-images;/home/mdia/test-images2' /home/mdia/test-images-preparees 'default;vignette;hidef' vips true /home/mdia/ImagePretraitement.log 10

Exemple de programmation dans le crontab

0 20 * * * java -jar ImagePretraitement.jar /home/mdia/pretraitement_images_plus.py '/home/mdia/test-images;/home/mdia/test-images2' /home/mdia/test-images-preparees 'default;vignette;hidef' vips true /home/mdia/ImagePretraitement.log 10

Avec ce cron, le script se lance tout les jours à 20h00 et écrit ses log dans le fichier /home/mdia/test.log

Message de log par rapport au traitement des images

Quand il donne juste l'info des éléments à supprimer sans faire l'action

  • [INFO NO DELETE] Répertoire vide :
  • [INFO NO DELETE] Image originale inexistant pour :

Quand il supprime réellement

  • [INFO DELETE] Suppression répertoire vide:
  • [INFO DELETE] Suppression image préparée :

Quand il crée de nouvelles images préparées qui n'existaient pas avant

  • [INFO CREATE DEFAULT|MINIATURE|HIDEF|VIGNETTE] Création image préparée :

Quand il met à jour une image préparée dont l'image original a changé

  • [INFO UPDATE DEFAULT|MINIATURE|HIDEF|VIGNETTE] Mise à jour image préparée

Quand une image originale ne peut pas être traitée

  • Erreur [0][!!IMAGE ILLISIBLE!!]
  • Syntax error:
  • ou d'autres messages d'erreurs

Pré-traitement manuel

Il peut être nécessaire de lancer le script en forçant le pré-traitement.

Le script python "seul" peut-être lancé manuellement, directement dans la console.

Exemple d’exécution du script :

python /home/ajlsm/script-pre-traitement/bin/pretraitement_images_plus.py --source=/var/data2/images2 --collection=1R --cible=/var/data/images-preparees --format=hidef --quality=45 --verbose=5 --force --vips

Voici les paramètres obligatoires et les paramètres optionnels :

obligatoires.add_option("-s", "--source",
    action="store",  type="string", dest="source",
    help="Dossier source")
obligatoires.add_option("-c", "--collection",
    action="store",  type="string", dest="collection",
    help="Collection d'images")
obligatoires.add_option("-b", "--cible",
    action="store",  type="string", dest="cible",
    help="Dossier cible")
obligatoires.add_option("-f", "--format",
    action="store",  type="string", dest="format",
    help="Dossier cible")
optionnels.add_option("-o", "--mode",
    action="store",  type="string", dest="mode", default="multiple",
    help="Le mode")
obligatoires.add_option("-e", "--iPath",
    action="store",  type="string", dest="iPath",
    help="Le chemin du fichier à traiter. A utiliser si l'argument mode est à single")
optionnels.add_option("-w", "--max-width",
    action="store",  type="int", dest="maxwidth", default=2200,
    help="Largeur maximale pour un original (en pixels) [defaut: 2200]")
optionnels.add_option("-l", "--max-height",
    action="store",  type="int", dest="maxheight", default=2200,
    help="Hauteur maximale pour un original (en pixels) [defaut: 2200]")
optionnels.add_option("-r", "--max-resolution",
    action="store",  type="int", dest="maxres", default=-1,
    help="Resolution maximale pour un original (en pixels) [defaut: -1]")
optionnels.add_option("-m", "--min-resolution",
    action="store",  type="int", dest="minres", default=-1,
    help="Resolution minimale pour un original (en pixels) [defaut: -1]")
optionnels.add_option("-i", "--width",
    action="store",  type="int", dest="width", default=2000,
    help="Largeur de la conversion (en pixels) [defaut: 2000]")
optionnels.add_option("-g", "--height",
    action="store",  type="int", dest="height", default=2000,
    help="Hauteur de la conversion (en pixels) [defaut: 2000]")
optionnels.add_option("-j", "--dxtile",
    action="store",  type="int", dest="dxtile", default=512,
    help="DZI, largeur d'une tuile [defaut: 512]")
optionnels.add_option("-k", "--dytile",
    action="store",  type="int", dest="dytile", default=512,
    help="DZI, hauteur d'une tuile [defaut: 512]")
optionnels.add_option("-q", "--quality",
    action="store",  type="int", dest="quality", default=70,
    help="Taux de compression de la conversion (de 0 a 100) [defaut: 70]")
optionnels.add_option("-d", "--depth",
    action="store",  type="int", dest="depth", default=8,
    help="Intensite de la conversion (8 ou 16 bits) [defaut: 8]")
optionnels.add_option("-x", "--force",
    action="store_true", dest="force", help="Forcer le pre-traitement malgre"
"l'existance de l'image pre-traitee.")
optionnels.add_option("-t", "--compter",
    action="store_true", dest="compter",
    help="Desactiver la conversion, effectue un simple comptage des images \
qui seront pre-traitees")
optionnels.add_option("-n", "--convert-exec",
    action="store",  type="string", dest="convertexec", default="convert",
    help="L'excutable pour la conversion [defaut: convert]")
optionnels.add_option("-a", "--magickslicer-exec",
    action="store",  type="string", dest="magickslicerexec", default="magick-slicer.sh",
    help="Chemin vers l'exécutable Magick Slicer à utiliser pour la conversion [defaut: convert]")
optionnels.add_option("-y", "--identify-exec",
    action="store",  type="string", dest="identifyexec", default="identify",
    help="L'excutable pour l'identification des images [defaut: identify]")
optionnels.add_option("-v", "--verbose",
    action="store",  type="int", dest="verbose", default=2,
    help="Niveau de verbosite (0-3).\n\
Niveau 0 : aucun message.\n\
Niveau 1 : Dates de debut et de fin, suivi du pre-traitement.\n\
Niveau 2 : Idem 1 plus compte prealable des images a traiter [defaut].\n\
Niveau 3 : Idem 2 plus message de debogage.")
optionnels.add_option("-p",  "--pyramidal", 
    action="store_true", dest="pyramidal",  help="Traitement pyramidal des images (Requiert ImageMagick >= 6.4.7-10")
optionnels.add_option("-z",  "--deepzoom", 
    action="store_true", dest="deepzoom",  help="Traitement deepzoom (dzi) des images (Requiert magick-slicer.sh au même niveau ou à indiquer avec le paramétre -a ou --magick-slicer")
optionnels.add_option("-u",  "--vips", 
    action="store_true", dest="vips",  help="Traitement pyramidal en utilisant vips à la place de ImageMagick (Requiert Vips >= 8.x.x")
optparser.add_option_group(obligatoires)
optparser.add_option_group(optionnels)