Cara Membaca Metadata Imej dari OneNote dalam Python

Cara Membaca Metadata Imej dari OneNote dalam Python

Setiap nod Image dalam dokumen OneNote membawa metadata bersama dengan bait piksel mentah: nama fail asal, dimensi paparan (lebar dan tinggi dalam titik), teks alternatif untuk kebolehcapaian, dan secara pilihan URL hiperpaut jika imej tersebut dipautkan. Aspose.Note FOSS untuk Python mendedahkan semua medan ini melalui kelas Image.


Prasyarat

pip install aspose-note

Sifat Imej

PropertyTypeDescription
img.BytesbytesData imej mentah. Tulis ke cakera dengan open(name, "wb").write(img.Bytes).
img.FileNamestr | NoneNama fail asal disimpan dalam fail .one. None jika tidak disimpan.
img.Widthfloat | NoneLebar paparan dalam titik. None jika tidak disimpan.
img.Heightfloat | NoneKetinggian paparan dalam titik. None jika tidak disimpan.
img.AlternativeTextDescriptionstr | NoneBadan teks alt kebolehcapaian. None jika tidak ditetapkan.
img.AlternativeTextTitlestr | NoneTajuk teks alt kebolehcapaian. None jika tidak ditetapkan.
img.HyperlinkUrlstr | NoneURL jika imej merupakan pautan klik. None jika tidak dipautkan.
img.Tagslist[NoteTag]Tag OneNote yang dilampirkan pada imej ini (bintang, kotak semak, dll.).

Langkah 1: Muatkan Dokumen dan Cari Imej

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 Imej

Lindungi semua medan yang boleh kosong 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 Imej 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")

Tapis Imej mengikut Sifat

Imej dengan pautan hiper

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

Imej 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 sentiasa hadir (mengembalikan b"" untuk imej yang tidak dapat dibaca, tidak pernah None). Periksa len(img.Bytes) > 0 sebelum menyimpan.
  • img.AlternativeTextTitle mungkin None jika dokumen sumber tidak menetapkan tajuk. Gunakan img.AlternativeTextDescription sebagai alternatif.
  • Dimensi berada dalam points (1 point = 1/72 inci), selaras dengan konvensyen PowerPoint dan PDF.

Lihat Juga

 Bahasa Melayu