چگونه متادیتای تصویر را از OneNote در Python بخوانیم

چگونه متادیتای تصویر را از OneNote در Python بخوانیم

هر Image گره در یک سند OneNote متادیتا را در کنار بایت‌های خام پیکسل حمل می‌کند: نام فایل اصلی، ابعاد نمایش (عرض و ارتفاع بر حسب پوینت)، متن جایگزین برای دسترسی‌پذیری، و به‌صورت اختیاری یک URL پیوند اگر تصویر لینک شده باشد. Aspose.Note FOSS برای Python تمام این فیلدها را از طریق the Image کلاس.


پیش‌نیازها

pip install aspose-note

ویژگی‌های تصویر

ویژگینوعتوضیح
img.Bytesbytesداده‌های خام تصویر. نوشتن به دیسک با 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]برچسب‌های OneNote پیوست شده به این تصویر (ستاره، چک‌باکس و غیره).

مرحله ۱: بارگذاری سند و یافتن تصاویر

from aspose.note import Document, Image

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

مرحله ۲: خواندن متادیتا برای هر تصویر

تمام فیلدهای nullable را با is not None قبل از استفاده:

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

مثال کامل: ذخیره تصاویر همراه با گزارش متادیتا

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

فیلتر کردن تصاویر بر اساس ویژگی

تصاویر با پیوندهای ابرمتنی

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

تصاویر با متن جایگزین

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

یادداشت‌ها

  • img.Bytes همیشه موجود است (باز می‌گرداند b"" برای تصاویر غیرقابل خواندن، هرگز None). بررسی کنید len(img.Bytes) > 0 قبل از ذخیره‌سازی.
  • img.AlternativeTextTitle ممکن است None اگر سند منبع عنوانی تنظیم نکند. از img.AlternativeTextDescription به عنوان جایگزین.
  • ابعاد بر حسب نقطه (۱ نقطه = ۱/۷۲ اینچ)، مطابق با استانداردهای PowerPoint و PDF.

همچنین ببینید

 فارسی