Suivi — Epub Téléchargement contenu au format EPub - Pb avec la gestion des images

#1895 Posté par Anonyme . État de l’entrée : corrigée. Assigné à Benoît Sibaud. Licence CC By‑SA.
Étiquettes :
3
26
août
2019

Bonjour,

Par exemple vu dans l'export EPub de cette dépêche :
https://linuxfr.org/news/g-mic-2-7-0-une-rentree-pleine-de-style-pour-le-traitement-d-images.epub

Dans l'EPub l'affichage des images n'est pas du tout fidèle à la dépêche Web et n'est pas correcte.

Il semblerait que dans le contenu de l'EPub plusieurs images différentes puissent être importer avec le même nom :

[eric@leon tmp]$ unzip -l g-mic-2-7-0-une-rentree-pleine-de-style-pour-le-traitement-d-images.epub
Archive:  g-mic-2-7-0-une-rentree-pleine-de-style-pour-le-traitement-d-images.epub
  Length      Date    Time    Name
---------  ---------- -----   ----
       20  00-00-1980 00:00   mimetype
        0  00-00-1980 00:00   META-INF/
      250  00-00-1980 00:00   META-INF/container.xml
        0  00-00-1980 00:00   EPUB/
      554  00-00-1980 00:00   EPUB/nav.xhtml
     1729  00-00-1980 00:00   EPUB/RonRonnement.css
    62393  00-00-1980 00:00   EPUB/content.xhtml
    11827  00-00-1980 00:00   EPUB/imagessections16.png
  1069189  00-00-1980 00:00   EPUB/img68747470733a2f2f676d69632e65752f676d69633237302f6f7269676.gif
   412087  00-00-1980 00:00   **EPUB/img68747470733a2f2f676d69632e65752f676d69633237302f7468756d6.png**
   245748  00-00-1980 00:00   **EPUB/img68747470733a2f2f676d69632e65752f676d69633237302f7468756d6.png**
   231763  00-00-1980 00:00   
...

Le problème ne semble pas se poser avec l'export au format Markdow.

Cordialement.

  • # https://github.com/linuxfrorg/epub-LinuxFr.org

    Posté par  . Évalué à 1 (+0/-0). Dernière modification le 24 septembre 2019 à 23:23.

    Bonjour,

    Le souci semble être lié à un formatage sur 60 caractères max des noms des fichiers images prévu dans la génération des EPub :
    https://github.com/linuxfrorg/epub-LinuxFr.org/commit/6926e50b10f958f89b64dd8d3f20d75480f92fa7

    Pour la dépêche citée en exemple (https://linuxfr.org/news/g-mic-2-7-0-une-rentree-pleine-de-style-pour-le-traitement-d-images) :
    - 2ème image dans la dépêche :
    https://img.linuxfr.org/img/68747470733a2f2f676d69632e65752f676d69633237302f7468756d622f6c6f676f5f676d69632e706e67/logo_gmic.png
    - 3ème image dans la dépêche :
    https://img.linuxfr.org/img/68747470733a2f2f676d69632e65752f676d69633237302f7468756d622f676d69635f3237302e706e67/gmic_270.png

    => dans l'EPub pour au moins ces 2 images on ne semble gérer à tort qu'un seul et même fichier image
    img68747470733a2f2f676d69632e65752f676d69633237302f7468756d6.png

    Mais je ne connais pas Go … je n'arrive pas à comprendre pour l'instant comment générer des EPub en local de mon coté avec epub-LinuxFr.org pour reproduire le souci
    http://127.0.0.1:9000/news/???

    Cordialement

  • # Analyse

    Posté par  (site web personnel) . Évalué à 4 (+0/-0). Dernière modification le 24 janvier 2021 à 12:23.

    Analyse de https://linuxfr.org/news/taptempo-pour-arduino-uno avec ces 3 jpg et son png

    Les 3 jpg :

    https://xulops.net/image/autre/arduino_uno_compatible.jpg
    https://xulops.net/image/autre/rebonds.jpg
    https://xulops.net/image/autre/taptempo_montage.jpg
    

    Les 3 jpg dans img :

    https://img.linuxfr.org/img/68747470733a2f2f78756c6f70732e6e65742f696d6167652f61757472652f61726475696e6f5f756e6f5f636f6d70617469626c652e6a7067/arduino_uno_compatible.jpg
    https://img.linuxfr.org/img/68747470733a2f2f78756c6f70732e6e65742f696d6167652f61757472652f7265626f6e64732e6a7067/rebonds.jpg
    https://img.linuxfr.org/img/68747470733a2f2f78756c6f70732e6e65742f696d6167652f61757472652f74617074656d706f5f6d6f6e746167652e6a7067/taptempo_montage.jpg
    

    (où 68747470733a2f2f78756c6f70732e6e65742f696d6167652f61757472652f est la version en hexadécimal de https://xulops.net/image/autre/ )

    Les 3 jpg dans epub (les 60 premiers octets du path de img sans les '/', soit les 30 premiers octets du path de l'image d'origine converti en hexa, d'où une collision fréquente sur un même domaine dès qu'on dépasse 30 octets):

    EPUB/img68747470733a2f2f78756c6f70732e6e65742f696d6167652f6175747.jpg
    
    • [^] # Re: Analyse

      Posté par  (site web personnel) . Évalué à 3 (+0/-0).

      URL brutes

      http://example.com/logo.jpg
      https://example.com/logo.jpg
      http://example.com/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
      https://example.com/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
      https://example.invalid/logo.jpg
      https://example.invalid/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
      https://example.invalid/with/a/very/very/very/long/path/to/reach/the/limit/logo.jpg
      https://example.invalid/with/a/very/very/very/long/path/to/reach/the/limit/old/logo.jpg
      

      Après img :

      /img/687474703a2f2f6578616d706c652e636f6d2f6c6f676f2e6a7067/logo.jpg
      /img/68747470733a2f2f6578616d706c652e636f6d2f6c6f676f2e6a7067/logo.jpg
      /img/687474703a2f2f6578616d706c652e636f6d2f776974686176657279766572797665727976657279766572797665727976657279766572796c6f6e676e616d65746f72656163687468656c696d69746c6f676f2e6a7067/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
      /img/68747470733a2f2f6578616d706c652e636f6d2f776974686176657279766572797665727976657279766572797665727976657279766572796c6f6e676e616d65746f72656163687468656c696d69746c6f676f2e6a7067/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
      /img/68747470733a2f2f6578616d706c652e696e76616c69642f6c6f676f2e6a7067/logo.jpg
      /img/68747470733a2f2f6578616d706c652e696e76616c69642f776974686176657279766572797665727976657279766572797665727976657279766572796c6f6e676e616d65746f72656163687468656c696d69746c6f676f2e6a7067/withaveryveryveryveryveryveryveryverylongnametoreachthelimitlogo.jpg
      /img/68747470733a2f2f6578616d706c652e696e76616c69642f776974682f612f766572792f766572792f766572792f6c6f6e672f706174682f746f2f72656163682f7468652f6c696d69742f6c6f676f2e6a7067/logo.jpg
      /img/68747470733a2f2f6578616d706c652e696e76616c69642f776974682f612f766572792f766572792f766572792f6c6f6e672f706174682f746f2f72656163682f7468652f6c696d69742f6f6c642f6c6f676f2e6a7067/logo.jpg
      

      Avec img, epub non corrigé:

      img687474703a2f2f6578616d706c652e636f6d2f6c6f676f2e6a7067lo.jpg
      img68747470733a2f2f6578616d706c652e636f6d2f6c6f676f2e6a7067.jpg
      img687474703a2f2f6578616d706c652e636f6d2f776974686176657279.jpg
      img68747470733a2f2f6578616d706c652e636f6d2f7769746861766572.jpg
      img68747470733a2f2f6578616d706c652e696e76616c69642f6c6f676f.jpg
      img68747470733a2f2f6578616d706c652e696e76616c69642f77697468.jpg # collision
      img68747470733a2f2f6578616d706c652e696e76616c69642f77697468.jpg # collision
      img68747470733a2f2f6578616d706c652e696e76616c69642f77697468.jpg # collision
      

      Sans img, epub non corrigé :

      logo.jpg # collision
      logo.jpg # collision
      withaveryveryveryveryveryveryveryverylongnametoreachthelimi.jpg # collision
      withaveryveryveryveryveryveryveryverylongnametoreachthelimi.jpg # collision
      logo.jpg # collision
      withaveryveryveryveryveryveryveryverylongnametoreachthelimi.jpg # collision
      withaveryveryverylongpathtoreachthelimitlogo.jpg
      withaveryveryverylongpathtoreachthelimitoldlogo.jpg
      

      Correctif proposé : un hachage sha224 (sha256 -> 64 octets et sha224 -> 56 octets, on avait choisi moins de 60, je vais m'y tenir) pour éviter les collisions de début de path en sortie d'img, mais en calculant plus largement que juste le path, autant prendre l'URI en entier, le tout en restant en 60 octets ou moins (ici 56) + l'extension.

                                      filename := strings.Replace(uri.Path, "/", "", -1)
                                      if len(filename) > 64 {
      -                                       filename = filename[:60] + path.Ext(filename)
      +                                       hashpart := sha256.Sum224([]byte(uri.String()))
      +                                       filename = hex.EncodeToString(hashpart[:]) + path.Ext(filename)
  • # autres tests

    Posté par  . Évalué à 1 (+0/-0).

    Si ça peut vous aider à avancer, j'ai fait quelques essais sur une liseuse Kobo ClaraHD.

    Je me suis basé sur les articles "taptempo-pour-arduino-uno" et "sortie-de-la-version-2-0-de-grisbi-logiciel-de-comptabilite".

    De base ces fichiers ne sont pas lisibles sur ma liseuse.

    En décompressant puis recompressant le fichier epub (via les fonctions du menu contextuel de Gnome), les fichiers deviennent lisibles.

    Par contre j'ésite ajouter une entrée de suivi pour la possibilité de redimensionner les images trop grande (du genre limiter à 1920x1080 pixels). Mais je ne suis pas certains que ça ne pénalisera pas certains).

    Les vrais naviguent en -42

    • [^] # Re: autres tests

      Posté par  (site web personnel) . Évalué à 3 (+0/-0).

      Normalement j'ai corrigé le souci des noms d'images en collision en prod.

      Par contre :
      - il y a d'autres problèmes ailleurs, visiblement sur https://linuxfr.org/users/tonio/journaux/s-occuper-pendant-les-vacances-yunohost-et-autohebergement signalé par Ysabeau, qui ne passe pas le validateur (j'ai fait le test en distant via http://validator.idpf.org/ puis en local) :

      $ epubcheck s-occuper-pendant-les-vacances-yunohost-et-autohebergement.epub
      Vérifications faites en utilisant les règles de la version epub 3.2.
      ERROR(MED-004): s-occuper-pendant-les-vacances-yunohost-et-autohebergement.epub/EPUB/(-1,-1): L'en-tête du fichier image pourrait être corrompu.
      ERROR(PKG-021): s-occuper-pendant-les-vacances-yunohost-et-autohebergement.epub/EPUB/(-1,-1): Fichier image corrompu rencontré.
      
      Vérification terminée avec des erreurs
      Messages: 0 fatale / 2 erreurs / 0 avertissement / 0 info
      
      EPUBCheck terminé
      

      Faisons le test avec un epub de référence (Children's Literature pris sur https://idpf.github.io/epub3-samples/30/samples.html ) :

      1) le fichier initial est validé par epubcheck

      $ epubcheck childrens-literature.epub 
      Vérifications faites en utilisant les règles de la version epub 3.2.
      Aucune erreur ou avertissement détecté.
      Messages: 0 fatale / 0 erreur / 0 avertissement / 0 info
      
      EPUBCheck terminé
      

      2) on dézippe

      $ unzip childrens-literature.epub
      

      3) on zippe bêtement

      $ zip test.epub EPUB/cover.xhtml EPUB/css/epub.css EPUB/css/nav.css EPUB/images/cover.png EPUB/nav.xhtml EPUB/package.opf EPUB/s04.xhtml EPUB/toc.ncx META-INF/container.xml mimetype 
      updating: mimetype (stored 0%)
      updating: EPUB/cover.xhtml (deflated 34%)
      updating: EPUB/css/epub.css (deflated 60%)
      updating: EPUB/css/nav.css (deflated 46%)
      updating: EPUB/images/cover.png (deflated 13%)
      updating: EPUB/nav.xhtml (deflated 82%)
      updating: EPUB/package.opf (deflated 62%)
      updating: EPUB/s04.xhtml (deflated 66%)
      updating: EPUB/toc.ncx (deflated 90%)
      updating: META-INF/container.xml (deflated 32%)
      $ epubcheck test.epub
      Vérifications faites en utilisant les règles de la version epub 3.2.
      ERROR(PKG-005): test.epub(-1,-1): Le fichier mimetype a une extension de longueur 28. Aucune extension de nom de fichier n'est autorisée pour le fichier mimetype.
      
      Vérification terminée avec des erreurs
      Messages: 0 fatale / 1 erreur / 0 avertissement / 0 info
      
      EPUBCheck terminé
      

      2) on zippe mieux…

      $ zip -X test.epub mimetype EPUB/cover.xhtml EPUB/css/epub.css EPUB/css/nav.css EPUB/images/cover.png EPUB/nav.xhtml EPUB/package.opf EPUB/s04.xhtml EPUB/toc.ncx META-INF/container.xml
        adding: mimetype (stored 0%)
        adding: EPUB/cover.xhtml (deflated 34%)
        adding: EPUB/css/epub.css (deflated 60%)
        adding: EPUB/css/nav.css (deflated 46%)
        adding: EPUB/images/cover.png (deflated 13%)
        adding: EPUB/nav.xhtml (deflated 82%)
        adding: EPUB/package.opf (deflated 62%)
        adding: EPUB/s04.xhtml (deflated 66%)
        adding: EPUB/toc.ncx (deflated 90%)
        adding: META-INF/container.xml (deflated 32%)
      $ epubcheck test.epub
      Vérifications faites en utilisant les règles de la version epub 3.2.
      Aucune erreur ou avertissement détecté.
      Messages: 0 fatale / 0 erreur / 0 avertissement / 0 info
      
      EPUBCheck terminé
      

      J'ai l'impression que la validateur ne veut pas les répertoires (zip -D), ni les attributs amenés par Unix, mais je n'ai pas noté ça dans la spécification (et personne ne s'était plaint de cela avant… possible que les liseuses soient juste tolérantes).

Envoyer un commentaire

Suivre le flux des commentaires

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