Como ler metadados de imagem do OneNote em Python

Como ler metadados de imagem do OneNote em Python

Este guia mostra como ler metadados de imagem nome do arquivo, dimensões, texto alternativo e URL de hiperlink ?? a partir do Microsoft OneNote. .one arquivos em Python usando Document.GetChildNodes() Para localizar todos os Image FOSS para Python expõe todos os Image campos de metadados através de uma API de classe limpa.


Precondições

Instale o pacote Aspose.Note FOSS a partir do PyPI usando o comando pip abaixo:

pip install aspose-note

Propriedades da imagem

PropriedadeTipo de veículo:Descrição:
img.BytesbytesGravar para disco com o computador. open(name, "wb").write(img.Bytes).
img.FileName`strNone`
img.Width`floatNone`
img.Height`floatNone`
img.AlternativeTextDescription`strNone`
img.AlternativeTextTitle`strNone`
img.HyperlinkUrl`strNone`
img.Tagslist[NoteTag]Marcas do OneNote anexadas a esta imagem (estrela, caixa de seleção etc.).

Passo 1: Carregar o documento e encontrar imagens

Carregamento a .one Arquivo com Document E chama-me. GetChildNodes(Image) para recuperar cada Image nó do arvore de documentos:

from aspose.note import Document, Image

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

Passo 2: Leia os metadados de cada imagem

Proteja todos os campos anulaveis com: is not None antes da utilização:

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

Exemplo completo: Salvar imagens com relatório de metadados

A função abaixo itera todos os Image nós, salva os bytes brutos de cada imagem no disco e imprime um relatório de metadados incluindo dimensões, texto alternativo e URL do hiperlink:

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 imagens por propriedade

Imagens com hiperligações

Filtrar imagens que não tenham um espaço vazio HyperlinkUrl Propriedade para listar apenas imagens vinculadas e os seus URL de destino:

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

Imagens com texto alternativo

Filtrar imagens que não tenham um espaço vazio AlternativeTextDescription Propriedade para identificar imagens com anotações de acessibilidade:

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 é sempre presente (retornos de b"" para imagens ilegíveis, nunca. None) Verificação len(img.Bytes) > 0 antes de salvar.
  • img.AlternativeTextTitle pode ser None se o documento de origem não tiver um título. Use img.AlternativeTextDescription como uma alternativa.
  • As dimensões estão em: pontos de (1 ponto = 1/72 polegada), combinando as convenções do PowerPoint e PDF.

Ver também:

 Português