كيفية قراءة بيانات تعريف الصورة من 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.FileName`strNone`
img.Width`floatNone`
img.Height`floatNone`
img.AlternativeTextDescription`strNone`
img.AlternativeTextTitle`strNone`
img.HyperlinkUrl`strNone`
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.

انظر أيضًا

 العربية