Cara Membaca Metadata Gambar dari OneNote dengan Python

Cara Membaca Metadata Gambar dari OneNote dengan Python

Setiap node Image dalam dokumen OneNote membawa metadata bersama byte piksel mentah: nama file asli, dimensi tampilan (lebar dan tinggi dalam poin), teks alternatif untuk aksesibilitas, dan secara opsional URL hyperlink jika gambar tersebut ditautkan. Aspose.Note FOSS untuk Python mengekspos semua bidang ini melalui kelas Image.


Prasyarat

pip install aspose-note

Properti Gambar

PropertyTypeDescription
img.BytesbytesData gambar mentah. Tulis ke disk dengan open(name, "wb").write(img.Bytes).
img.FileNamestr | NoneNama file asli disimpan dalam file .one. None jika tidak disimpan.
img.Widthfloat | NoneLebar tampilan dalam poin. None jika tidak disimpan.
img.Heightfloat | NoneTinggi tampilan dalam poin. None jika tidak disimpan.
img.AlternativeTextDescriptionstr | NoneIsi teks alt aksesibilitas. None jika tidak diatur.
img.AlternativeTextTitlestr | NoneJudul teks alt aksesibilitas. None jika tidak diatur.
img.HyperlinkUrlstr | NoneURL jika gambar merupakan tautan yang dapat diklik. None jika tidak ditautkan.
img.Tagslist[NoteTag]Tag OneNote yang terlampir pada gambar ini (bintang, kotak centang, dll.).

Langkah 1: Muat Dokumen dan Temukan Gambar

from aspose.note import Document, Image

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

Langkah 2: Baca Metadata untuk Setiap Gambar

Lindungi semua bidang yang dapat bernilai null dengan is not None sebelum digunakan:

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

Contoh Lengkap: Simpan Gambar dengan Laporan Metadata

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

Filter Gambar berdasarkan Properti

Gambar dengan hyperlink

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

Gambar dengan teks alt

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

Catatan

  • img.Bytes selalu ada (mengembalikan b"" untuk gambar yang tidak dapat dibaca, tidak pernah None). Periksa len(img.Bytes) > 0 sebelum menyimpan.
  • img.AlternativeTextTitle mungkin None jika dokumen sumber tidak menetapkan judul. Gunakan img.AlternativeTextDescription sebagai cadangan.
  • Dimensi dalam points (1 point = 1/72 inci), sesuai dengan konvensi PowerPoint dan PDF.

Lihat Juga

 Bahasa Indonesia