Comment lire les métadonnées d'image depuis OneNote dans Python
Chaque Image un nœud dans un document OneNote porte des métadonnées aux côtés des octets bruts de pixels : le nom de fichier original, 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 pour Python expose tous ces champs via le Image classe.
Prérequis
pip install aspose-notePropriétés de l’image
| Propriété | Type | Description |
|---|---|---|
img.Bytes | bytes | Données d’image brutes. Écrire sur le disque avec open(name, "wb").write(img.Bytes). |
img.FileName | `str | None` |
img.Width | `float | None` |
img.Height | `float | None` |
img.AlternativeTextDescription | `str | None` |
img.AlternativeTextTitle | `str | None` |
img.HyperlinkUrl | `str | None` |
img.Tags | list[NoteTag] | Étiquettes 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 nullables 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 un 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.Bytesest toujours présent (renvoieb""pour les images illisibles, jamaisNone)len(img.Bytes) > 0Vérifiez.img.AlternativeTextTitleavant d’enregistrer.Nonepeut êtreimg.AlternativeTextDescriptionsi le document source ne définit pas de titre. Utilisez.- comme solution de repli. Les dimensions sont en points (1 point = 1/72 pouce), correspondant aux conventions de PowerPoint et PDF.