Come leggere i metadati dell'immagine da OneNote in Python
Ogni nodo Image in un documento OneNote contiene metadati insieme ai byte pixel grezzi: il nome file originale, le dimensioni di visualizzazione (larghezza e altezza in punti), il testo alternativo per l’accessibilità e, facoltativamente, un URL di collegamento ipertestuale se l’immagine era collegata. Aspose.Note FOSS per Python espone tutti questi campi tramite la classe Image.
Prerequisiti
pip install aspose-noteProprietà immagine
| Proprietà | Tipo | Descrizione |
|---|---|---|
img.Bytes | bytes | Dati grezzi dell’immagine. Scrivi su disco con open(name, "wb").write(img.Bytes). |
img.FileName | str | None | Nome file originale memorizzato nel file .one. None se non memorizzato. |
img.Width | float | None | Larghezza di visualizzazione in punti. None se non memorizzata. |
img.Height | float | None | Altezza di visualizzazione in punti. None se non memorizzata. |
img.AlternativeTextDescription | str | None | Corpo del testo alternativo di accessibilità. None se non impostato. |
img.AlternativeTextTitle | str | None | Titolo del testo alternativo di accessibilità. None se non impostato. |
img.HyperlinkUrl | str | None | URL se l’immagine è un collegamento ipertestuale cliccabile. None se non collegata. |
img.Tags | list[NoteTag] | Tag OneNote associati a questa immagine (stella, casella di controllo, ecc.). |
Passo 1: Carica il documento e trova le immagini
from aspose.note import Document, Image
doc = Document("MyNotes.one")
images = doc.GetChildNodes(Image)
print(f"Found {len(images)} image(s)")Passo 2: Leggi i metadati per ogni immagine
Proteggi tutti i campi nullable con is not None prima dell’uso:
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}")Esempio completo: Salva immagini con report dei metadati
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")Filtra le immagini per proprietà
Immagini con collegamenti ipertestuali
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}")Immagini con testo alternativo
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}")Note
img.Bytesè sempre presente (restituisceb""per immagini illeggibili, maiNone). Verificalen(img.Bytes) > 0prima di salvare.img.AlternativeTextTitlepuò essereNonese il documento di origine non imposta un titolo. Usaimg.AlternativeTextDescriptioncome alternativa.- Le dimensioni sono in punti (1 punto = 1/72 di pollice), in linea con le convenzioni di PowerPoint e PDF.