كيفية قراءة بيانات تعريف الصورة من OneNote باستخدام Python
كل عقدة Image في مستند OneNote تحمل بيانات تعريفية إلى جانب بايتات البكسل الخام: اسم الملف الأصلي، أبعاد العرض (العرض والارتفاع بالنقاط)، النص البديل لإمكانية الوصول، واختياريًا عنوان URL للارتباط التشعبي إذا كانت الصورة مرتبطة. تُظهر Aspose.Note FOSS for Python جميع هذه الحقول من خلال الفئة Image.
المتطلبات المسبقة
pip install aspose-noteخصائص الصورة
| الخاصية | النوع | الوصف |
|---|---|---|
img.Bytes | bytes | بيانات الصورة الخام. اكتب إلى القرص باستخدام open(name, "wb").write(img.Bytes). |
img.FileName | str | None | اسم الملف الأصلي مخزن في ملف .one. None إذا لم يتم التخزين. |
img.Width | float | None | عرض العرض بالنقاط. None إذا لم يتم التخزين. |
img.Height | float | None | ارتفاع العرض بالنقاط. None إذا لم يتم التخزين. |
img.AlternativeTextDescription | str | None | نص بديل للوصول للجسم. None إذا لم يتم تعيينه. |
img.AlternativeTextTitle | str | None | عنوان نص بديل للوصول. None إذا لم يتم تعيينه. |
img.HyperlinkUrl | str | None | عنوان URL إذا كانت الصورة رابطًا قابلًا للنقر. None إذا لم تكن مرتبطة. |
img.Tags | list[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.