لماذا تختلف الصور المأخوذة من ملف PDF عن تلك التي تظهر على الصفحة؟

قد يتم تخزين الصور ذات الشفافية بشكل منفصل كصورة رئيسية وقناع ناعم. بعد ذلك، استخدم Pillow لإنشاء RGBA PNG، وأدخل ملف PDF الموجود في الذاكرة، وقم بتقييم الصورة الرئيسية وSMask. إن استخراج وحدات بايت الصورة الرئيسية لا يساوي الحصول على تأثير الشفافية الكامل، ولا يساوي إعادة بناء كافة مثيلات العرض على الصفحة.

غالبًا ما تبدو الصور التي تستخرجها من ملفات PDF مختلفة عما تراه على الصفحة: فهي إما سوداء تمامًا، أو بحجم خاطئ، أو خلفيات أو علامات مائية مفقودة. لا تكمن المشكلة عادةً في الكود نفسه، ولكن في حقيقة أنك تقرأ كائن الصورة الأصلي داخل ملف PDF وتفتقد تعليمات التكوين عند عرض الصفحة.

هذه المقالة مكتوبة للمطورين ومعالجي المستندات الذين يحتاجون إلى استخدام البرامج النصية لتحليل صور PDF. إنها مناسبة لسيناريوهات مثل المعالجة المسبقة للتعرف الضوئي على الحروف وإعادة تنظيم المحتوى. بعد القراءة، يمكنك فهم الفرق بين الكائن الأصلي وعرض الصفحة، ومعرفة سبب تسبب SMask (القناع الناعم) في فقدان المناطق الشفافة، وإتقان مجموعة من طرق الاختبار الذاتي باستخدام العينات الاصطناعية.

تستخدم هذه المقالة عينات اصطناعية لتوضيح طريقة المعالجة. تم فحص الكود بأمثلة في بيئة معزولة ولا يضمن جميع الملفات الحقيقية أو أداء المنتج. قبل معالجة المستندات المهمة، يرجى الاحتفاظ بالنسخ الأصلية ومراجعتها وفقًا للحدود وبنود القبول في النص.

نتائج استخراج الصور بصيغة PDF غير متوافقة مع الصفحة؟ استنتاج جملة واحدة

بايتات الصورة الرئيسية المستخرجة لا تساوي التأثير الكامل على الصفحة. يجب معالجة SMask في نفس الوقت، ويتم استخدام نتيجة العرض الفعلية للقارئ كمعيار للقبول.

حالتكالممارسات الموصى بهاسبب
نتيجة الاستخراج هي مستطيل بلون خالص، وتصبح المنطقة الشفافة سوداء أو بيضاءتحقق مما إذا كانت smask_xref تساوي 0 وقم بدمج SMask كقناة ألفا في الصورة الرئيسيةقد يتم تخزين الصور ذات الشفافية بشكل منفصل كالصورة الرئيسية والقناع الناعم. سيؤدي استخراج الصورة الرئيسية فقط إلى فقدان معلومات الشفافية.
وما يتم استخراجه هو الصورة الكبيرة الكاملة، ولا يتم عرض سوى جزء منها على الصفحة.اقرأ مصفوفة CTM و/BBox، وقم بالقص وفقًا لمنطقة العرضيمكن إعادة استخدام نفس خريطة الأساس من خلال صفحات متعددة، وتعرض كل صفحة منطقتها الجزئية فقط.
اتجاه الصورة معكوس أو مشوهقراءة معلمات المصفوفة للتصحيح الهندسي، والتحقق يدويًا من النص والوجوهقد تحتوي مصفوفة التحويل على تحجيم سلبي أو تحويلات غير موحدة
تم الاستخراج بنجاح ولكن لا يمكن رؤية الصفحةاستعلم عن حالة OCG وقارنها مع CropBoxقد تكون الصورة مخفية بواسطة مجموعة محتوى اختيارية أو خارج منطقة الاقتصاص
الصورة ضبابية أو منخفضة الدقةقم بتسجيل البيانات التعريفية لـ DPI ووضع علامة عليها على أنها منخفضة الجودة، وأعد فحص الملفات المصدر إذا لزم الأمرقد تكون الصورة الأصلية المضمنة في حد ذاتها صورة مصغرة منخفضة الدقة

الفرق بين الكائنات الأصلية وخطوط العرض

يتم تنظيم ملفات PDF مثل مستودع الموارد. `Document.extract_image(xref)` ما تفعله هذه الطريقة هو إخراج الأجزاء من المستودع كما هي. يحتاج العرض الموجود على الصفحة أيضًا إلى المرور عبر عمليات متعددة: قياس مصفوفة التحويل (CTM)، وقطع مسار القطع (مسار المقطع)، وخلط مجموعة الشفافية (مجموعة الشفافية)، وتراكب القناع الناعم (قناع ناعم).

الفرق الأكثر شيوعًا يأتي من SMask. يتم تقسيم العديد من ملفات PNG ذات قناة الشفافية إلى جزأين داخل ملف PDF: دفق صور RGB، ودفق قناع رمادي منفصل. إذا قمت فقط باستخراج الصورة الرئيسية وتجاهل كائن SMask المرتبط، فستحصل على مستطيل بدون شفافية، وستصبح المنطقة الشفافة في الأصل سوداء أو بيضاء.

بالإضافة إلى ذلك، من أجل توفير الحجم، يمكن إعادة استخدام نفس الخريطة الأساسية عالية الدقة بواسطة صفحات متعددة، وتعرض كل صفحة جزءًا منها فقط من خلال /BBox ومصفوفات مختلفة. سيؤدي الاستخراج المباشر إلى الحصول على الصورة الكبيرة الكاملة، بدلاً من الأجزاء المقصوصة التي يراها المستخدم. إن "ما تراه ليس ما تحصل عليه" هو سمة متأصلة في PDF كتنسيق تبادل وليس عيبًا في مكتبة التحليل.

ويقارن الجدول أدناه بين وجهتي النظر:

📊 المقارنة الأساسية

أبعاد التبايناستخراج الكائن الأصلي مباشرةنتائج عرض الصفحة
المحتوى الذي تحصل عليهالأجزاء الأصلية في مستودع الموارد، مثل تدفق الصورة الرئيسيالتأثيرات البصرية التي تعالج بواسطة تعليمات التوليف
الشفافيةيمكن تخزين الصورة الرئيسية وSMask بشكل منفصل ويجب تعيينهما يدوياتمت إضافة القناع الناعم، وتظهر المنطقة الشفافة بشكل طبيعي
الحجم والمدىقد يكون الحجم الكامل لخريطة القاعدةمقيد بواسطة CTM و/BBox ومسارات القص
حالة إعادة الاستخدامقد تشارك نفس الخريطة الأساسية عبر عدة صفحاتكل صفحة تقدم أجزائها الخاصة فقط

بيئة اختبار التوليف والتعامل مع وضع الحدود

للتحقق من منطق الاستخراج دون الاعتماد على ملفات خارجية، يجب بناء ملف PDF صناعي يحتوي على SMask. يستخدم الكود التالي PyMuPDF لإنشاء مستندات اختبار في الذاكرة، حيث تحتوي كائنات الصور على أقنعة ناعمة مستقلة، محاكاة سيناريو واقعي حيث "الأيقونات لها خلفيات شفافة لكنها مخزنة في تدفقات منفصلة في الأسفل."

from io import BytesIO
from PIL import Image
import pymupdf
im = Image.new("RGBA", (16, 16), (255, 0, 0, 128))
raw = BytesIO()
im.save(raw, format="PNG")
with pymupdf.open() as doc:
    page = doc.new_page(width=100, height=100)
    page.insert_image(pymupdf.Rect(10, 10, 70, 70), stream=raw.getvalue())
    images = page.get_images(full=True)
    assert len(images) == 1
    xref, smask = images[0][:2]
    assert xref > 0 and smask > 0
    assert doc.extract_image(xref)["width"] == 16
    assert doc.extract_image(smask)["image"]

الإخراج الصحيح للتوقعات: يجب أن يكون البرنامج قادرا على التعرف على أن الصورة مرتبطة ب SMask واستخراج بيانات الصورة الرئيسية بنجاح.

الكود مكتف بذاته بالكامل ولا يتطلب ملفات إدخال خارجية. يقوم بتوليف ملفات PDF مع SMask في الذاكرة ثم يتحقق مما إذا كان منطق الاستخراج يحدد ارتباطات القناع بشكل صحيح. يحتوي الكود على تأكيدين رئيسيين: أحدهما للتحقق من سلامة البيانات المستخرجة، والآخر للتحقق من إدراك حالات الارتباط ب SMask.

يركز هذا الكود على التحقق من السلامة على مستوى البيانات الوصفية. في الإنتاج الفعلي، إذا تم استخدام smask_xref != 0، تحتاج مكتبات مثل Pillow إلى لصق نتائج doc.extract_image(smask_xref) كقناة ألفا على الصورة الرئيسية. هاتان الادعاءان يغطيان على التوالي العقدين الأساسيين: "قابلية استخراج البيانات" و"الرؤية الترابطية بالقناع"، والتي يمكن أن تمنع النجاحات الكاذبة عند حدوث مستندات فارغة أو تغييرات في واجهة برمجة التطبيقات.

الحدود بين قبول نتائج الاستخراج والمراجعة اليدوية

لا يمكن للاستخراج الآلي أن يحل محل التأكيد البصري بالكامل. يلخص الجدول أدناه الظواهر غير الطبيعية الشائعة، واستراتيجيات التعامل، والمواقف التي يجب الحكم عليها يدويا.

راقب الظاهرةالأسباب المحتملةقرارات المعالجة الآليةمراجعة يدوية لظروف الزناد
الصورة سوداء بالكامل أو بيضاء بالكامليتم استخراج SMask كصورة مستقلة؛ فشل فك ترميز فضاء الألوانتحقق من جمعيات SMask؛ حاول إعادة مساحة الألوان إلى الخلفلا يزال المحتوى لا يمكن التعرف عليه بعد الاسترجاع؛ يتضمن الألوان الموضعية أو الألوان المتعلقة بالأجهزة
يتم عكس اتجاه الصورة أو تمديدهتحتوي مصفوفة CTM على تحويلات سلبية أو غير منتظمةقراءة معلمات المصفوفة للتصحيح الهندسيبعد التصحيح، تتشوه النصوص أو الوجوه بشكل ملحوظ؛ مسارات القص المتجهية المعقدة
عدة صور صغيرة مجتمعة في صورة كبيرة واحدةترميز الكتل (نمط التبليط) أو تخزين الشرائطاقطع أو انضم حسب إحداثيات BBoxفواصل واضحة في المفاصل؛ منطقيا، يجب أن تكون وحدة دلالية مستقلة
تم الاستخلاص بنجاح، لكن الصفحة غير مرئيةمخفي بواسطة OCG (مجموعة المحتوى الاختياري)؛ تقع خارج منطقة القطعاستعلام تصفية حالة OCG; قارن مع CropBoxمنطق الطبقة معقد، مثل OCMD المتداخل؛ حقول الشكل الديناميكية
الدقة منخفضة جدا أو ضبابيةالتضمين الأصلي هو صورة مصغرة منخفضة الدقةسجل بيانات وصفية DPI وصنفها على أنها منخفضة الجودةالجداول أو النصوص الرئيسية تكون ضبابية وغير قابلة للقراءة؛ تحتاج إلى إعادة مسح ملف المصدر

لاحظ أن "عرض الكود" يتحقق فقط من اتصال استدعاءات واجهة برمجة التطبيقات وتدفقات البيانات، ولا يضمن الأداء من طرف إلى طرف. عند مواجهة منطق OCG المتداخل، أو الشيدرات المخصصة، أو المستندات المشفرة، يكون مخرج السكريبت للرجوع إليه فقط ويجب قبوله بناء على العرض الفعلي لقارئ PDF.

🎯 أي طريقة تناسبك؟

إذا كنت بحاجة للحفاظ على تأثير الشفافية

أولا، تحقق مما إذا كان SMask موجودا، ودمجها في قناة ألفا، ثم قم بإجراء المعالجة التالية.

إذا كنت تحتاج فقط إلى صورة جزئية على الصفحة

اقرأ CTM و /BBox، وقص حسب منطقة العرض، بدلا من حفظ الصورة الأساسية مباشرة.

إذا كانت صورتك نسخة ممسوحة ضوئيا أو مدمجة في صور منخفضة الدقة

أولا، سجل بيانات وصفية DPI وحدد الجودة؛ إذا كان المحتوى الرئيسي غير واضح، عد إلى الملف المصدر لإعادة المسح.

إذا كان المستند يحتوي على طبقات أو تشفير أو قص معقد

عامل إخراج السكريبت كنتيجة أولية، وفي النهاية استخدم تأثير العرض الخاص بقارئ PDF كمرجع نهائي.

❓ الأسئلة الشائعة (الأسئلة الشائعة)

1. لماذا تحولت المناطق الشفافة من الصورة المستخرجة إلى اللون الأسود؟

سبب شائع هو أن المعلومات الشفافة تخزن في SMask، حيث يتم استخراج الصورة الرئيسية فقط دون دمج القناع.

2. الصورة المستخرجة أكبر بكثير مما تراه في الصفحة. ما الذي يحدث؟

يمكن إعادة استخدام نفس خريطة القاعدة من عدة صفحات، وتعرض كل صفحة جزءا جزئيا فقط عبر /BBox والمصفوفات. الاستخراج المباشر ينتج خريطة القاعدة الكاملة.

3. إذا كان الكود يعمل، هل يعني ذلك أن نتائج الاستخراج يمكن استخدامها مباشرة؟

لا. عروض الكود تتحقق فقط من استدعاءات واجهة برمجة التطبيقات واتصال تدفق البيانات، وفي النهاية تتطلب قبول نتائج العرض الفعلية للقارئ.

4. كان الاستخلاص ناجحا، لكن الصورة لم تكن مرئية على الصفحة. ما السبب؟

قد تكون الصور مخفية بواسطة مجموعات المحتوى الاختيارية (OCGs) أو تقع خارج منطقة الاقتصاص، مما يسمح باستعلامات حالة OCG والمقارنة مع CropBox.

📝 ملخص

كائن الصورة الأصلي وعرض الصفحة في PDF هما شيئان مختلفان، لذا قبل استخراجهما، عليك أن تفهم علاقتهما. معالجة معلومات SMask والمصفوفة والقص معا، والتحقق منها بنتائج العرض تضمن نتائج موثوقة.

اختبر الآن: ارفع مستندك لتبدأ الترجمة، مع الحفاظ على التنسيق الأصلي

تاريخ التحديث: 2026-11-13