تقنية

صورة يراجعها المساعد: أي أبعاد بعد exif_transpose ؟

شبكة مؤلفة عرضها ثلاث خانات وارتفاعها اثنتان تصبح بعرض اثنتين وارتفاع ثلاث بعد ربع دورة، مع فصل خيار النسخة من التعديل الموضعي.
مخطط من إعداد بحر العلوم. ست خانات قبل وبعد؛ لم نشغل الدالة أو نثبت أصل صورة

أبعاد الصورة قبل معالجة Orientation ليست دائما أبعادها بعد المعالجة. عندما يقرأ المساعد حقلا من EXIF ثم يلخص العرض، نحتاج اسم العملية وحالة الناتج. نقرأ عقد exif_transpose في Pillow12.3.0، ونستعمل شبكة صغيرة مؤلفة دون فتح صورة أو تشغيل دالة.

الخلاصة السريعة

ينقل exif_transpose الصورة وفق Orientation غير 1 ويزيل معلومة الاتجاه. [1] نسمي أبعاد الأصل والناتج كلًا على حدة، ونحدد هل العقد يعيد نسخة أم يعدل الأصل موضعيا.

  • تصف Pillow12.3.0 تطبيق الاتجاه غير 1 ثم إزالة معلومة Orientation. [1] وجود الوسم لا يثبت أن المعالجة حصلت فعلا.
  • تربط الشيفرة القيمة 6 بالعملية ROTATE_270. [1] في شبكتنا 3 أعمدة وصفين يتبادل العرض والارتفاع بعد ربع الدورة: 2 و 3، دون قياس صورة.
  • مع in_place=False يرجع ناتج جديد، أو نسخة حتى إن لم تلزم عملية؛ ومع True يعدل الأصل ويرجع None. [1] لا نسمي None صورة فارغة.
  • تغير الأبعاد أو إزالة وسم الاتجاه لا يثبت وقت التصوير أو هوية مصدره؛ يسجل الملخص مرحلة الصورة، ولم ننفذ معالجة أو تحقق أصل.

هل قرأنا وسما أم طبقنا عملية؟

تصف Pillow12.3.0 الدالة بأنها تنقل الصورة وفق EXIF Orientation إذا كان غير 1، ثم تزيل معلومة الاتجاه. [1]

نفصل إذن بطاقة وسم عن بطاقة عملية تمت. قد يصف المساعد صورة بأنها «صححت» لمجرد أن سجلها يحوي Orientation، لكن وجود قيمة وحده لا يخبرنا بأن دالة استدعيت أو أن ناتجا معينا عرض. نحتاج وصف العملية وحالتها، لا اسم حقل في قائمة فقط.

نقرأ عقدا محدد الإصدار ولا نعطي جميع برامج الصور السلوك نفسه. إذا كانت المادة تخص عارضا آخر، لا ننسب إليه عقد Pillow دون مصدره وسجل عمله. كذلك لا نستنتج كيف كانت الصورة تبدو قبل المعالجة من عرض بعد المعالجة وحده.

كيف تتبادل أبعاد شبكة صغيرة؟

تربط الشيفرة الرسمية قيمة Orientation 6 بعملية ROTATE_270. [1]

نؤلف شبكة عرضها 3 خانات وارتفاعها 2، ونختار لها القيمة 6 في الورقة. ربع الدورة ينقل الأعمدة إلى اتجاه الصفوف، فيصبح عرض الناتج 2 وارتفاعه 3. عدد الخانات يبقى 6؛ تبديل الجهة ليس استخراج تفصيل مفقود أو إنشاء خانات إضافية.

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

المرحلة المؤلفةالعرضالارتفاععدد الخانات
قبل ربع الدورة326
بعد ربع الدورة236

أي كائن يعيده الاستدعاء؟

مع in_place=False يرجع كائن صورة جديد، وحتى عند عدم النقل يرجع نسخة. مع True يعدل الأصل ويرجع None. [1]

لهذا نحتاج اسم الخيار قبل تفسير خانة العائد. None في فرع True ليس صورة فارغة أو علامة أن الأصل لم يتغير؛ إنه عائد العقد الموصوف. وبالمقابل، فرع False يتيح تسمية الأصل والناتج بمعرفين في دفترنا، حتى عندما لا تتغير الأبعاد.

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

هل يثبت التصحيح ما كان في العالم؟

إزالة وسم الاتجاه بعد العملية لا تثبت اسم المصور أو وقت التقاط المشهد. كذلك لا يخبرنا عرض 2 وارتفاع 3 هل الصورة جاءت من كاميرا أو توليد؛ تلك أسئلة أصل خارج وظيفة العملية التي قرأناها.

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

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

المصادر ومتابعة القراءة

  1. Pillow12.3.0: ImageOps exif_transpose source (يفتح في نافذة جديدة)pillow.readthedocs.io

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.