كيفية قراءة بيانات تعريف الصورة من 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نص بديل للوصول للجسم. None إذا لم يتم تعيينه.
img.AlternativeTextTitlestr | Noneعنوان نص بديل للوصول. 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)")

الخطوة 2: قراءة البيانات الوصفية لكل صورة

احمِ جميع الحقول القابلة للـ null باستخدام 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/72 بوصة)، متطابقة مع معايير PowerPoint و PDF.

انظر أيضًا

 العربية