Skip to main content

الوصف

يعرض نتيجة الاستعلام على هيئة صورة PNG. ويكون ذلك مفيدًا كأداة تصور مدمجة. يُحدَّد حجم الصورة الناتجة بواسطة الإعدادات output_format_image_width و output_format_image_height (القيمة الافتراضية لكليهما هي 1024). وتُملأ البكسلات التي لا تغطيها النتيجة باللون الأسود (في وضعي RGB والتدرج الرمادي) أو بالأسود الشفاف (في وضع RGBA). يُحدَّد وضع الألوان تلقائيًا استنادًا إلى أسماء الأعمدة وأنواعها في النتيجة: تُطابَق أسماء الأعمدة دون حساسية لحالة الأحرف. وإذا تعذر تحديد وضع الألوان بشكل لا لبس فيه (مثلًا: أسماء أعمدة غير معروفة، أو مزج v مع r/g/b/a، أو غياب أحد r/g/b)، فإن الاستعلام يرفع استثناءً. بالنسبة إلى قنوات البكسل، تُقيَّد القيم الصحيحة ضمن [0, 255]، وتُقيَّد قيم الفاصلة العائمة ضمن [0, 1] ثم تُحوَّل إلى النطاق [0, 255]. يُحدَّد موضع كل سجل في الصورة بأحد وضعين:
  • ضمني (الافتراضي — عندما لا يكون x ولا y موجودين). يقابل كل سجل بكسلًا واحدًا؛ وتُملأ البكسلات بترتيب خطوط المسح: من اليسار إلى اليمين، ومن الأعلى إلى الأسفل.
  • صريح (عند وجود العمودين x وy، وكلاهما من نوع عدد صحيح). يحدِّد العمودان x وy إحداثيات البكسل. وتُتجاهل السجلات ذات الإحداثيات الواقعة خارج الصورة بصمت. وعند وجود عدة سجلات بالإحداثيات نفسها، تكون الغلبة للأخير (خوارزمية الرسام).

مثال للاستخدام

الإحداثيات الضمنية (صف لكل بكسل)، RGB

إحداثيات صريحة، وتدرّج رمادي

الرسوم المتحركة

إذا كانت النتيجة تحتوي على عمود t بنوع عدد صحيح، فسينتج التنسيق صورة PNG متحركة (APNG) بدلًا من صورة ثابتة. تُجمَّع السجلات في إطارات وفقًا لقيمة t، التي تمثل الإزاحة الزمنية النسبية للإطار. كل إطار صورة مستقلة: تكون اللوحة فارغة عند بدء كل إطار، وفي وضع الإحداثيات الضمني يُعاد المؤشر إلى الزاوية العلوية اليسرى. يمكن استخدام العمود t مع أيٍّ من وضعي الإحداثيات. تُحدَّد وحدة t بواسطة output_format_image_time_multiplier_seconds و output_format_image_time_divisor_seconds: تساوي وحدة واحدة من t عدد الثواني output_format_image_time_multiplier_seconds / output_format_image_time_divisor_seconds. وباستخدام القيم الافتراضية (1 و60)، تساوي وحدة واحدة من t 1/60 من الثانية. يُعرض الإطار إلى أن يبدأ الإطار التالي، لذا تساوي مدته الفرق بين قيمتين متتاليتين لـ t. ويُعرض الإطار الأخير للمدة نفسها التي عُرض بها الإطار السابق. تتكرر الرسوم المتحركة إلى ما لا نهاية.

بث الإطارات

افتراضيًا، تُجمع جميع الإطارات في الذاكرة وتُكتب عند انتهاء الاستعلام، مما يُبقي مخزنًا واحدًا للصور لكل قيمة مميزة لـ t ويتيح ورود t بأي ترتيب. يكتب الإعداد output_format_image_streaming_animation كل إطار فور ظهور القيمة التالية لـ t. يُحتفظ بمخزن صور واحد فقط في الذاكرة، وتصل الإطارات إلى المخرجات بينما لا يزال الاستعلام قيد التشغيل، بحيث يمكن للعارض عرضها فور إنتاجها. في المقابل:
  • يجب أن تكون قيم t غير متناقصة؛ وإلا يرفع الاستعلام استثناءً. أضف ORDER BY t عند الحاجة.
  • لا يكون عدد الإطارات معروفًا عند وجوب كتابة الترويسة، لذا يعلن الجزء acTL حدًا أعلى بدلًا من العدد الدقيق. تشغّل المتصفحات ملفًا كهذا، لكن المفككات التي تعتمد العدد المُعلن (مثل Pillow وبعض أدوات APNG من سطر الأوامر) تُبلغ عن خطأ بعد آخر إطار فعلي. ويُستثنى من ذلك الرسم المتحرك المكوّن من إطار واحد: إذ تكون النتيجة كاملة قد قُرئت عند كتابة ذلك الإطار، لذا يُعلن العدد بدقة وتتوافق المخرجات مع المواصفة.
نظرًا إلى أن بروتوكول الصور المضمنة في الطرفية يحمل تدفق البيانات بالكامل كحمولة واحدة، فلا يمكن للإطارات الوصول إلى الطرفية مبكرًا، ولا يؤثر هذا الإعداد هناك إلا في مقدار الذاكرة المستخدمة. يُصحَّح العدد الدقيق للإطارات في الحمولة المخزنة مؤقتًا قبل إرسالها، لذا لا ينطبق التحذير المتعلق بالحد الأعلى. لا يُعرض الرسم المتحرك إلا في وضع الطرفية iterm. ولا يستطيع بروتوكول sixel تمثيل الرسوم المتحركة مطلقًا، كما أن بروتوكول رسومات Kitty لا يحرّك الصور إلا عبر تدفق منفصل من الأوامر لكل إطار، وليس عبر تدفق بيانات متحرك، لذا سيعرض الإطار الأول فقط؛ ويرفض كلا الوضعين نتيجة تحتوي على عمود t.

عرض الصور في الطرفية

بشكل افتراضي، يكتب تنسيق PNG بايتات الصورة الخام. ويجعل الإعداد output_format_image_terminal_mode التنسيق يعرض الصورة مباشرةً في الطرفية باستخدام بروتوكول صور مضمنة بدلًا من ذلك:

إعدادات التنسيق

آخر تعديل في ١٤ أغسطس ٢٠٢٦