Comment lire les métadonnées d'image depuis OneNote en Python

Comment lire les métadonnées d'image depuis OneNote en Python

Chaque nœud Image d’un document OneNote contient des métadonnées ainsi que les octets bruts des pixels : le nom de fichier d’origine, les dimensions d’affichage (largeur et hauteur en points), le texte alternatif pour l’accessibilité, et éventuellement une URL de lien hypertexte si l’image était liée. Aspose.Note FOSS for Python expose tous ces champs via la classe Image.


Prérequis

pip install aspose-note

Propriétés de l’image

PropriétéTypeDescription
img.BytesbytesDonnées d’image brutes. Écrire sur le disque avec open(name, "wb").write(img.Bytes).
img.FileNamestr | NoneNom de fichier original stocké dans le fichier .one. None si non stocké.
img.Widthfloat | NoneLargeur d’affichage en points. None si non stockée.
img.Heightfloat | NoneHauteur d’affichage en points. None si non stockée.
img.AlternativeTextDescriptionstr | NoneCorps du texte alternatif d’accessibilité. None si non défini.
img.AlternativeTextTitlestr | NoneTitre du texte alternatif d’accessibilité. None si non défini.
img.HyperlinkUrlstr | NoneURL si l’image est un hyperlien cliquable. None si non lié.
img.Tagslist[NoteTag]Balises OneNote attachées à cette image (étoile, case à cocher, etc.).

Étape 1 : Charger le document et trouver les images

from aspose.note import Document, Image

doc = Document("MyNotes.one")
images = doc.GetChildNodes(Image)
print(f"Found {len(images)} image(s)")

Étape 2 : Lire les métadonnées de chaque image

Protégez tous les champs nullable avec is not None avant utilisation :

from aspose.note import Document, Image

doc = Document("MyNotes.one")

for i, img in enumerate(doc.GetChildNodes(Image), start=1):
    print(f"\nImage {i}:")
    print(f"  Filename:    {img.FileName or '(no filename)'}")
    print(f"  Size:        {img.Bytes and len(img.Bytes):,} bytes")

    if img.Width is not None and img.Height is not None:
        print(f"  Dimensions:  {img.Width:.1f} × {img.Height:.1f} pts")

    if img.AlternativeTextDescription:
        print(f"  Alt text:    {img.AlternativeTextDescription}")

    if img.HyperlinkUrl:
        print(f"  Hyperlink:   {img.HyperlinkUrl}")

    if img.Tags:
        for tag in img.Tags:
            print(f"  Tag:         {tag.Label or tag.Icon}")

Exemple complet : Enregistrer les images avec le rapport de métadonnées

from pathlib import Path
from aspose.note import Document, Image

def report_and_save_images(one_path: str, out_dir: str = "images") -> None:
    doc = Document(one_path)
    images = doc.GetChildNodes(Image)
    if not images:
        print("No images found.")
        return

    out = Path(out_dir)
    out.mkdir(exist_ok=True)

    for i, img in enumerate(images, start=1):
        # Determine save name
        name = img.FileName or f"image_{i}.bin"
        dest = out / name

        # Save bytes
        dest.write_bytes(img.Bytes)

        # Report metadata
        dims = (
            f"{img.Width:.0f}×{img.Height:.0f}pts"
            if img.Width is not None and img.Height is not None
            else "unknown size"
        )
        alt = img.AlternativeTextDescription or ""
        link = img.HyperlinkUrl or ""

        print(f"  [{i}] {name}  {dims}"
              + (f"  alt='{alt}'" if alt else "")
              + (f"  url={link}" if link else ""))

    print(f"\nSaved {len(images)} image(s) to '{out_dir}/'")

report_and_save_images("MyNotes.one")

Filtrer les images par propriété

Images avec des hyperliens

from aspose.note import Document, Image

doc = Document("MyNotes.one")
linked = [img for img in doc.GetChildNodes(Image) if img.HyperlinkUrl]
for img in linked:
    print(f"{img.FileName or 'image'}{img.HyperlinkUrl}")

Images avec texte alternatif

from aspose.note import Document, Image

doc = Document("MyNotes.one")
with_alt = [img for img in doc.GetChildNodes(Image) if img.AlternativeTextDescription]
for img in with_alt:
    print(f"{img.FileName}: {img.AlternativeTextDescription}")

Notes

  • img.Bytes est toujours présent (renvoie b"" pour les images illisibles, jamais None). Vérifiez len(img.Bytes) > 0 avant d’enregistrer.
  • img.AlternativeTextTitle peut être None si le document source ne définit pas de titre. Utilisez img.AlternativeTextDescription comme solution de secours.
  • Les dimensions sont en points (1 point = 1/72 pouce), conformément aux conventions de PowerPoint et PDF.

Voir aussi

 Français