Cara Membaca Metadata Gambar dari OneNote di Python
Setiap Image node dalam dokumen OneNote membawa metadata bersamaan dengan byte piksel mentah: nama file asli, dimensi tampilan (lebar dan tinggi dalam poin), teks alternatif untuk aksesibilitas, dan secara opsional URL tautan jika gambar tersebut ditautkan. Aspose.Note FOSS untuk Python mengekspos semua bidang ini melalui Image kelas.
Prasyarat
pip install aspose-noteProperti Gambar
| Properti | Tipe | Deskripsi |
|---|---|---|
img.Bytes | bytes | Data gambar mentah. Tulis ke disk dengan open(name, "wb").write(img.Bytes). |
img.FileName | `str | None` |
img.Width | `float | None` |
img.Height | `float | None` |
img.AlternativeTextDescription | `str | None` |
img.AlternativeTextTitle | `str | None` |
img.HyperlinkUrl | `str | None` |
img.Tags | list[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.Bytesselalu ada (mengembalikanb""untuk gambar yang tidak dapat dibaca, tidak pernahNone). Periksalen(img.Bytes) > 0sebelum menyimpan.img.AlternativeTextTitlebisa jadiNonejika dokumen sumber tidak menetapkan judul. Gunakanimg.AlternativeTextDescriptionsebagai cadangan.- Dimensi dalam point (1 point = 1/72 inci), sesuai dengan konvensi PowerPoint dan PDF.