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

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

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


پیش‌نیازها

pip install aspose-note

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

ویژگینوعتوضیح
img.Bytesbytesداده‌های تصویر خام. با open(name, "wb").write(img.Bytes) روی دیسک بنویسید.
img.FileNamestr | Noneنام فایل اصلی در فایل .one ذخیره می‌شود. None اگر ذخیره نشده باشد.
img.Widthfloat | Noneعرض نمایش به نقطه. None اگر ذخیره نشده باشد.
img.Heightfloat | Noneارتفاع نمایش به نقطه. None اگر ذخیره نشده باشد.
img.AlternativeTextDescriptionstr | Noneمتن بدنهٔ alt دسترسی‌پذیری. None اگر تنظیم نشده باشد.
img.AlternativeTextTitlestr | Noneعنوان متن alt دسترسی‌پذیری. None اگر تنظیم نشده باشد.
img.HyperlinkUrlstr | Noneآدرس URL اگر تصویر یک پیوند قابل کلیک باشد. None اگر پیوند نشده باشد.
img.Tagslist[NoteTag]برچسب‌های OneNote پیوست شده به این تصویر (ستاره، چک‌باکس و غیره).

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

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 به عنوان جایگزین استفاده کنید.
  • ابعاد بر حسب نقطه هستند (1 نقطه = 1/72 اینچ)، مطابق با استانداردهای PowerPoint و PDF.

موارد مرتبط

 فارسی