Cómo leer los metadatos de la imagen de OneNote en Python

Cómo leer los metadatos de la imagen de OneNote en Python

Cada nodo Image en un documento de OneNote lleva metadatos junto a los bytes de píxeles sin procesar: el nombre de archivo original, las dimensiones de visualización (ancho y alto en puntos), el texto alternativo para accesibilidad y, opcionalmente, una URL de hipervínculo si la imagen estaba vinculada. Aspose.Note FOSS for Python expone todos estos campos a través de la clase Image.


Requisitos previos

pip install aspose-note

Propiedades de la imagen

PropertyTypeDescription
img.BytesbytesDatos de imagen sin procesar. Escriba en disco con open(name, "wb").write(img.Bytes).
img.FileNamestr | NoneNombre de archivo original almacenado en el archivo .one. None si no está almacenado.
img.Widthfloat | NoneAncho de visualización en puntos. None si no está almacenado.
img.Heightfloat | NoneAltura de visualización en puntos. None si no está almacenado.
img.AlternativeTextDescriptionstr | NoneCuerpo del texto alternativo de accesibilidad. None si no está configurado.
img.AlternativeTextTitlestr | NoneTítulo del texto alternativo de accesibilidad. None si no está configurado.
img.HyperlinkUrlstr | NoneURL si la imagen es un hipervínculo clickeable. None si no está enlazada.
img.Tagslist[NoteTag]Etiquetas de OneNote adjuntas a esta imagen (estrella, casilla de verificación, etc.).

Paso 1: Cargar el documento y encontrar imágenes

from aspose.note import Document, Image

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

Paso 2: Leer metadatos de cada imagen

Proteja todos los campos anulables con is not None antes de usarlos:

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}")

Ejemplo completo: Guardar imágenes con informe de metadatos

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")

Filtrar imágenes por propiedad

Imágenes con hipervínculos

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}")

Imágenes con texto 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}")

Notas

  • img.Bytes siempre está presente (devuelve b"" para imágenes ilegibles, nunca None). Verifique len(img.Bytes) > 0 antes de guardar.
  • img.AlternativeTextTitle puede ser None si el documento de origen no establece un título. Use img.AlternativeTextDescription como alternativa.
  • Las dimensiones están en puntos (1 punto = 1/72 pulgada), coincidiendo con las convenciones de PowerPoint y PDF.

Ver también

 Español