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