Journal odfimages : traiter les images dans des documents bureautiques

Posté par  (site web personnel) .
Étiquettes : aucune
26
10
juil.
2010
Bonjour, nal !

Comme aucun outil n'existait pour cela, j'ai décidé de coder trois petits utilitaires pour traiter les images dans des documents bureautiques standard (OpenDocument, donc). ConcrÚtement : extraire, compresser ou détacher les images d'un document.

Cette suite d'outils, à laquelle j'ai donné le nom wachement original de « odfimages », se compose donc de trois programmes :
  • odfimgextract pour extraire les images d'un document dans un rĂ©pertoire donnĂ© ;
  • odfimgdetach pour dĂ©tacher les images d'un document, c'est Ă  dire les extraire, et construire un nouveau document qui ne les contient pas, mais y fait rĂ©fĂ©rence en tant que fichiers externes ;
  • odfimgcompress pour effectuer diverses opĂ©rations de compression sur les images Ă  l'intĂ©rieur d'un document : rĂ©duction de la rĂ©solution, changement de format


Distribution

Pour le moment, tout ça est Ă  tester : n'hĂ©sitez pas Ă  aider et Ă  me signaler tout problĂšme ou suggestion en commentaire. Ça se passe ici, prenez le dernier snapshot. Quand j'aurai le temps, je ferai un vrai site web pour ces outils.

Ah oui, au fait, c'est sous GPL v3+.

Technique

Techniquement, c'est codĂ© en Python, et ça utilise la Python Imaging Library — uniquement pour odfimgcompress —, SAX pour traiter le XML en sĂ©rie et le module standard zipfile pour extraire les donnĂ©es. Les pages de manuel sont codĂ©es en DocBook, et compilĂ©es par XSL pour produire les nroff. Et puis tout ça est sous Git.

odfimgextract est le plus simple des trois outils : il extrait bĂȘtement du document tous les fichiers qui ont une extension d'image. Pas besoin de faire plus compliquĂ©, je pense.

odfimgdetach, lui, va lire le manifeste du document — c'est un document XML qui liste les fichiers embarquĂ©s — pour trouver les fichiers de type image. Il les extrait, les retire du manifeste, puis rĂ©Ă©crit les rĂ©fĂ©rences Ă  ces images dans le contenu du document.

Enfin, odfimgcompress commence par lire le contenu du document — vu que c'est lui qui contient les dimensions physiques des cadres d'image — et, selon les options choisies, effectue divers traitement sur les images embarquĂ©es trouvĂ©es. En cas de changement de format, et donc aussi de nom, il rĂ©Ă©crit les dĂ©clarations de ces images dans le manifeste.

Commentaires

La spécification OpenDocument n'est pas si longue que ça, et, pour de petits besoins comme ceux-ci, elle serait presque agréable à parcourir.

Futur

Il me reste encore pas mal de travail :
  • faire un site web ;
  • Ă©crire un autre outil odfimgattach pour intĂ©grer les images externes auxquelles un fichier fait rĂ©fĂ©rence ;
  • faire un paquet Debian.

Ces outils tournent peut-ĂȘtre sous des systĂšme non Unix. Personnellement je m'en moque, cette portabilitĂ© n'est pas un de mes objectifs — en revanche je ne fais rien pour ne pas ĂȘtre portable —, mais si quelqu'un veut essayer, ce sera bienvenu.

Seul le format OpenDocument est pris en charge, et aucun autre format ne sera ajouté.

Quand ce sera un peu plus mĂ»r, je ferai une dĂ©pĂȘche.
  • # Inspiration

    Posté par  (site web personnel) . Évalué à 6.

    Au fait, cette idée m'est venue de deux sources :
    — pdfimages, des poppler-utils ;
    — un collĂšgue qui voulait acheter un FileOptimizerÂź pour Microsoft OfficeÂź, qui fait sans doute plus que ça, mais dont au moins une fonction est de compresser les images Ă  l'intĂ©rieur d'un document.
    • [^] # Re: Inspiration

      Posté par  . Évalué à 8.

      J'adore la seconde raison. Il y a souvent des options « vraiment génial que l'on ne trouve que chez X » qui sont en fait tellement simple que l'on en parle pas sous des environnement moins marketisé ou qui sont implémentables.

      Je te fĂ©licite pour ce travail mĂȘme si personnellememnt je ne m'en servirais probablement pas.

      Tous les contenus que j'Ă©cris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes Ă©crits)

  • # 2 remarques

    Posté par  (site web personnel) . Évalué à 3.

    >il extrait bĂȘtement du document tous les fichiers qui ont une extension d'image

    Faire un petit appel Ă  magic pour confirmer la nature du fichier ne serait peut-ĂȘtre pas du luxe (on peut imaginer un odt emportant un fichier truquĂ© pour corrompre l'os que tu sais).

    DeuxiĂšme remarque un petit lien vers ton repo illustrerai positivement ce journal.
  • # Outil pour sysadmin en mal d'espace disque

    Posté par  (site web personnel) . Évalué à 3.

    Hello,

    ça faisait quelquetemps que je cherchais un application du type odfimgcompress. J'avais fait un script mais ce n'était pas toujours génial.

    Cet outil en ligne de commande est clairement orienté sysadmin car la secrétaire de direction ne s'en servira probablement jamais du fait de sa non-maßtrise de la ligne de commande (enfin, je n'exclus rien mais en rÚgle générale, c'est le cas).

    En revanche, le sysadmin va clairement te dire merci pour le gain de place que ton outil va permettre. Dans les organisations, en rÚgle générale, les documents bureautiques qui contiennent des images ne sont pas forcément trÚs bien conçus par leurs utilisateurs. Ces derniers cherchent avant tout à ce qu'il y ait une image et qu'elle rentre dans la page au bon endroit. Le reste (taille, résolution, algo de compression), ils s'en foutent et effectivement, il faut avoir quelques outils pour s'en occuper. Au final, on se retrouve souvent avec des odp de 50Mo pour 5 diapos ou bien un simple rapport en odt de 30 pages de texte pur faisant 25Mo parce que le logo utilisé en bas de la page 1 et qui fait 1cmx2cm est un "png" (Ooo compresse dans ce format les images par défaut) en 2048x1024 pixels.

    Avec odfimgcompress, le sysadmin qui en a marre que certains utilisateurs explosent leur quota d'espace disque ou viennent le voir sans arrĂȘt pour qu'il relĂšve la taille maximale d'envoi d'un email (et qui en a surtout marre de devoir les sensibiliser en permanence Ă  la gestion de la taille des fichiers) pourra gagner enfin de l'espace disque en optimisant la taille des fichiers bureautique.

    Maintenant, pour juguler le problĂšme Ă  la base, il faudrait modifier le comportement d'OpenOffice en indiquant la rĂ©solution par dĂ©faut des images (et que ce soit paramĂ©trable par un sysadmin) ou en offrant Ă  l'utilisateur un moyen simple de la choisir (avec une extension comme Sun Presentation Minimizer ou bien carrĂ©ment intĂ©grĂ© comme on fait pour choisir la rĂ©solution des PDF). Ensuite, une petite explication sur la rĂ©solution et la taille des images Ă  destination de l'utilisateur final et c'est jouĂ© ! N'oublions pas que ces derniers pestent souvent parce qu'ils ne peuvent pas envoyer tel ou tel document par email parce que celui-ci dĂ©passe la taille maximale d'envoi. Comme, en rĂšgle gĂ©nĂ©rale, on Ă©crit pour se faire lire, un document bureautique a de grandes chances d'ĂȘtre envoyĂ© par email.

    Donc, merci...
    • [^] # Re: Outil pour sysadmin en mal d'espace disque

      Posté par  (site web personnel) . Évalué à 2.

      Cet outil en ligne de commande est clairement orienté sysadmin car la secrétaire de direction ne s'en servira probablement jamais du fait de sa non-maßtrise de la ligne de commande (enfin, je n'exclus rien mais en rÚgle générale, c'est le cas).

      Je plussoie. Avoir une version graphique serait un plus, mais je ne veux pas m'en occuper pour l'instant, je veux d'abord stabiliser l'interface en ligne de commande de base.
    • [^] # Re: Outil pour sysadmin en mal d'espace disque

      Posté par  . Évalué à 2.

      De la mĂȘme maniĂšre que pour les PDF on peut les optimiser avec goshtscript ou avec djvu.

      Tous les contenus que j'Ă©cris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes Ă©crits)

  • # Github ?

    Posté par  . Évalué à 1.

    Je ne conteste pas ton choix d'hĂ©berger ton dĂ©pot Git sur ton propre serveur, mais je regrette quand mĂȘme que ça ne soit pas hĂ©bergĂ© sur un truc comme Github ou Gitorious.

    Je viens de trouver un bug dans odfimgcompress (un truc tout con, par ailleurs), qui fait que l'outil plante sur des images dont la taille est indiquée en points (pt). Je n'ai aucun moyen pour le moment de faire un rapport de bug correct et une merge request pour corriger ça.

    Évidemment, tu pourrais installer un Redmine, un Trac, un Bugzilla, etc. pour ça. Mais tout l'intĂ©rĂȘt des solutions comme Github est justement que c'est fait automatiquement et que le processus de signalement de bugs et de contribution peut-ĂȘtre rĂ©alisĂ© facilement dĂšs la mise en ligne du projet. LĂ , il n'y a aucun moyen simple de contribuer mon bugfix (pas de mailing list, pas de bug tracker) Ă  part un mail ou un commentaire sur DLFP.

    En parlant de ça, voilà un patch : http://paste.pocoo.org/show/cO7P8av32VVE2c3180xi/ .
    • [^] # Re: Github ?

      Posté par  . Évalué à 2.

      L'intĂ©rĂȘt de git est pas d'ĂȘtre acentrĂ© ?
    • [^] # Re: Github ?

      Posté par  (site web personnel) . Évalué à 5.

      Je viens de trouver un bug dans odfimgcompress (un truc tout con, par ailleurs), qui fait que l'outil plante sur des images dont la taille est indiquée en points (pt).

      Merci !

      Je n'ai aucun moyen pour le moment de faire un rapport de bug correct et une merge request pour corriger ça.

      Ah mais si, c'est tout l'intĂ©rĂȘt de Git, pas besoin de dĂ©pĂŽt central. D'ailleurs, un dĂ©pĂŽt officiel, il y en a un, le mien, qui est aussi utilisable par qui que ce soit que n'importe quel dĂ©pĂŽt sur SourceForge ou Dieu sait oĂč. C'est Ă  dire en lecture seule.

      Donc, l'intĂ©rĂȘt de Git, c'est que tu peux faire des modifications chez toi, puis me les proposer, au choix :
      — en exposant ta branche sur un dĂ©pĂŽt, puis en m'envoyant une requĂȘte de pull ;
      — en m'envoyant un git-format-patch.

      RequĂȘte de pull ou de merge, ça veut dire la mĂȘme chose : le but est de faire un merge, mais pour ça, i faut d'abord rĂ©cupĂ©rer la branche tierce, avec un fetch, et le pull, c'est fetch puis merge, donc on parle bien de la mĂȘme chose. En revanche je ne vois pas en quoi une requĂȘte de pull est conditionnĂ©e au fait d'ĂȘtre exposĂ© sur un gros dĂ©pĂŽt. Une requĂȘte de pull, ça se rĂ©sume à :
      Salut, j'ai corrigé des trucs dans ton projet, si tu veux tu peux les récupérer sur la branche contrib de mon dépÎt <git://git.example.com/odfimages.git> en faisant :
      git pull git://git.example.com/odfimages.git contrib
  • # LPOD ?

    Posté par  (site web personnel) . Évalué à 2.

    LPOD[1] est une librairie ODF, elle permet de créer, manipuler des documents ODF en python, perl et ruby.

    L'outil lpod-show.py permet d'extraire les images.

    [1] http://lpod-project.org
    [2] http://lpod-project.org/tools
    • [^] # Re: LPOD ?

      Posté par  (site web personnel) . Évalué à 2.

      TrĂšs intĂ©ressant, je vais peut-ĂȘtre utiliser cette bibliothĂšque, tiens.

      En revanche, pour extraire les images, en rĂ©alitĂ© cet outil extrait tout, et n'est donc pas plus fin qu'un bĂȘte unzip. :-)
  • # RE: odfimages

    Posté par  . Évalué à 1.

    mmh, voici des outils qui ont l'air trÚs intéressants. Bravo et bon courage pour la suite. J'en profite pour demander si vous pensez qu'il serait possible de faire aussi un outil permettant de changer automatiquement la police dominante d'un document sans toucher aux polices secondaires.

    Typiquement c'est utile pour les gens qui comme moi utilisent l'extension Cmaths, et qui ont des documents truffés de formules, avec une police différente pour le texte et pour les formules ;), mais sans doute également pour les gens qui utilisent des modÚles de documents, avec des polices spéciales et inamovibles qui forment le cadre..

Suivre le flux des commentaires

Note : les commentaires appartiennent Ă  celles et ceux qui les ont postĂ©s. Nous n’en sommes pas responsables.