بيانات XMP الوصفية للصور البانورامية 360 درجة

تحتوي مساحة اسم البانوراما الموضحة هنا على خصائص توفر معلومات بخصوص إنشاء وعرض بانوراما 360 درجة، ويُشار إليها أيضًا أحيانًا باسم الصور البانورامية، مثل تلك التي أنشأتها ميزة الصور البانورامية 360 درجة في كاميرا Android 4.2. يجب أن تكون البيانات الوصفية متسلسلة ومضمّنة داخل صورة بانوراما 360 درجة كما هو موضّح في معيار Adobe XMP (اطّلع على references في نهاية هذه الصفحة).

معرّف الموارد المنتظم (URI) لمساحة الاسم هو http://ns.google.com/photos/1.0/panorama/

خصائص البيانات الوصفية

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

تجدر الإشارة إلى أنّ منتجات Google تتيح عرض إسقاطات دائرية فقط. لا تتوفر توقعات إضافية حاليًا إلا من قبل أطراف أخرى.

إسقاطات كروية

إسقاطات أسطوانية

لاحظ أنه إذا كان الجزء العلوي من الصورة الأسطوانية فوق الأفق، يجب أن تكون CroppedAreaTopPixels سالبة. وستضع القيمة 0 لـ CroppedAreaTopPixels أعلى الصورة في الأفق. تضع القيمة الموجبة لـ CroppedAreaTopPixels أعلى الصورة أسفل الأفق.

مرجع مَعلمة GPano

الاسم Type مطلوبة القيمة التلقائية
(يفترض المُشاهد)
وصف الخاصية يجب اتخاذ إجراء في حال تعديل الصورة.
GPano:UsePanoramaViewer منطقي لا صحيح لتحديد ما إذا كان سيتم عرض هذه الصورة في عارض صور بانوراما 360 درجة بدلاً من صورة مسطحة عادية. يمكن تحديد ذلك استنادًا إلى الإعدادات المفضّلة للمستخدم أو من خلال برنامج التركيب. قد يختار التطبيق الذي يعرض الصورة أو يستوعبها تجاهل هذا. التحجيم/الاقتصاص:
ليس هناك أي تغيير. قد يقرر أحد التطبيقات تبديل هذا إلى False إذا كان حقل العرض أقل من قيمة معينة.
GPano:CaptureSoftware سلسلة لا timing fixed in amara إذا تم التقاط الصورة باستخدام تطبيق على جهاز جوّال، مثل هاتف Android، سيكون اسم التطبيق الذي تم استخدامه (مثل "صورة بانورامية 360 درجة"). يجب ترك هذا الحقل فارغًا إذا تم التقاط الصور المصدر يدويًا، مثلاً باستخدام كاميرا رقمية ذات عدسة أحادية عاكسة (DSLR) على حامل ثلاثي القوائم. timing fixed in amara
GPano:StitchingSoftware سلسلة لا timing fixed in amara البرنامج الذي تم استخدامه لإنشاء صورة بانوراما 360 درجة النهائية. وقد تكون هذه القيمة أحيانًا هي قيمة GPano:CaptureSoftware. timing fixed in amara
GPano:ProjectionType فتح ميزة "اختيار النص" نعم

متماثلة المستطيلات

نوع التوقع المُستخدَم في ملف الصورة تتيح منتجات Google حاليًا استخدام القيمة المتساوية المستطيلات فقط. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:PoseHeadingDegrees حقيقية لا، ولكنها مطلوبة للعرض على "خرائط Google" timing fixed in amara عنوان البوصلة، يتم قياسه بالدرجات في اتجاه عقارب الساعة من الشمال، لوسط الصورة. يجب أن تكون القيمة >= 0 و < 360. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:PosePitchDegrees حقيقية لا 0 درجة لونية، تم قياسها بالدرجات فوق الأفق، للوسط في الصورة. يجب أن تكون القيمة >= -90 و <= 90. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:PoseRollDegrees حقيقية لا 0 لفة الصورة، قياسًا بالدرجات، حيث يكون المستوى مع الأفق 0. كلما زاد اللفة، يدور أفق الصورة عكس اتجاه عقارب الساعة. يجب أن تكون القيمة أكبر من -180 و<= 180. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:InitialViewHeadingDegrees عدد صحيح لا 0 زاوية العنوان للعرض الأولي بالدرجات في اتجاه عقارب الساعة من شمال العالم الحقيقي، وليست بالنسبة إلى مركز البانوراما. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:InitialViewPitchDegrees عدد صحيح لا 0 زاوية درجة الانحدار للعرض الأولي بالدرجات فوق أفق العالم الحقيقي، وليس بالنسبة إلى مركز البانوراما. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:InitialViewRollDegrees عدد صحيح لا 0 زاوية الدوران للعرض الأولي بالدرجات، حيث يكون المستوى مع أفق العالم الحقيقي 0. كلما زاد اللفة، يدور الأفق عكس اتجاه عقارب الساعة في العرض. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:InitialHorizontalFOVDegrees حقيقية لا timing fixed in amara حقل الرؤية الأفقي الأولي الذي يتعين على المشاهد عرضه (بالدرجات). وهذا يشبه مستوى التكبير/التصغير. timing fixed in amara
GPano:InitialVerticalFOVDegrees حقيقية لا timing fixed in amara حقل العرض الرأسي الأولي الذي يجب أن يعرضه المشاهد (بالدرجات). وهذا يشبه مستوى التكبير/التصغير. إذا كان كل من GPano:InitialHorizontalFOVDegrees وGPano:InitialVerticalFOVDegrees، ستكون الأولوية لـ GPano:InitialHorizontalFOVDegrees. لا تستخدم سوى بغرض عرض المحتوى بنسب عرض إلى ارتفاع متعددة، وتفضل أن يظل حقل العرض الرأسي ثابتًا بينما قد يتغير حقل العرض الأفقي. لا تتيح منتجات Google هذا الحقل حاليًا. timing fixed in amara
GPano:FirstPhotoDate التاريخ لا timing fixed in amara تاريخ ووقت أول صورة تم إنشاؤها في صورة بانوراما 360 درجة. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:LastPhotoDate التاريخ لا timing fixed in amara تاريخ ووقت آخر صورة تم إنشاؤها في صورة بانوراما 360 درجة. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:SourcePhotosCount عدد صحيح لا timing fixed in amara عدد صور المصدر المستخدمة لإنشاء صورة بانوراما 360 درجة. المقياس/الاقتصاص: ليس هناك أي تغيير.
GPano:ExposureLockUsed منطقي لا timing fixed in amara وقت التقاط صور من مصادر فردية، سواء تم قفل إعدادات التعرّض للضوء في الكاميرا أم لا timing fixed in amara
GPano:CroppedAreaImageWidthPixels عدد صحيح نعم timing fixed in amara العرض الأصلي بوحدات البكسل في الصورة (يساوي عرض الصورة الفعلي في الصور التي لم يتم تعديلها). راجِع المخطّطات البيانية أعلاه. تدرج/اقتصاص: يجب تحديث هذه الخاصية لتعكس الحجم الجديد للصورة.
GPano:CroppedAreaImageHeightPixels عدد صحيح نعم timing fixed in amara الارتفاع الأصلي بالبكسل للصورة (يساوي ارتفاع الصورة الفعلي للصور التي لم يتم تعديلها). راجِع المخطّطات البيانية أعلاه. تدرج/اقتصاص: يجب تحديث هذه الخاصية لتعكس الحجم الجديد للصورة.
GPano:FullPanoWidthPixels عدد صحيح نعم timing fixed in amara العرض الكامل الأصلي الذي تم اقتصاص الصورة منه إذا تم التقاط صورة بانورامية 360 درجة فقط، فإن هذا يحدد عرض الصورة البانورامية بالكامل. راجِع المخطّطات البيانية أعلاه. الاقتصاص: بدون تغيير.
المقياس: يجب ضبط هذا المقياس وفقًا لذلك.
GPano:FullPanoHeightPixels عدد صحيح نعم timing fixed in amara الارتفاع الكامل الأصلي الذي تم اقتصاص الصورة منه إذا تم التقاط صورة بانورامية 360 درجة فقط، فإن هذا يحدد ارتفاع صورة بانوراما 360 درجة بالكامل. راجِع المخطّطات البيانية أعلاه. الاقتصاص: بدون تغيير.
المقياس: يجب ضبط هذا المقياس وفقًا لذلك.
GPano:CroppedAreaLeftPixels عدد صحيح نعم timing fixed in amara عمود حيث تم اقتصاص الحافة اليسرى للصورة من صورة بانوراما 360 درجة بالحجم الكامل. راجِع المخطّطات البيانية أعلاه. اقتصاص: إذا تم تغيير الاقتصاص الأيسر للصورة، يجب تعديل هذه القيمة.
المقياس: يجب ضبط حجم الصورة بشكل مناسب.
GPano:CroppedAreaTopPixels عدد صحيح نعم timing fixed in amara صف تم اقتصاص الحافة العلوية للصورة من صورة بانوراما 360 درجة بالحجم الكامل. راجِع المخطّطات البيانية أعلاه. اقتصاص: إذا تم تغيير الجزء العلوي من الصورة، يجب تعديل هذه القيمة.
المقياس: يجب تحجيم هذه القيمة بشكل مناسب وفقًا لذلك.
GPano:InitialCameraDolly حقيقية لا 0 تعمل هذه المعلمة الاختيارية على تحريك موضع الكاميرا الافتراضية على طول خط الرؤية، بعيدًا عن وسط صورة بانوراما 360 درجة. يتم تمثيل موضع السطح الخلفي بالقيمة -1.0، بينما يتم تمثيل موضع السطح الأمامي بالقيمة 1.0. للعرض العادي، يجب ضبط هذه المَعلمة على 0. timing fixed in amara

مثال لصورة بانوراما 360 درجة كاملة

يمكن لغير المبرمجين إضافة مثال البيانات الوصفية أدناه إلى الصور الكروية الكاملة الحالية (360 درجة × 180 درجة) مع تعديلات بسيطة فقط. ويمكنك إجراء ذلك في منتجات تعديل الصور مثل Adobe Photoshop.

  1. تغيير أي موضع ورود لـ 4000 و2000 ليطابق عرض الصورة وارتفاعها بالبكسل
  2. تحديث PoseHeadingDegrees إذا كنت تريد أن يتمكن تطبيق "خرائط Google" من عرض الصورة البانورامية 360 درجة، وإلا يمكنك إزالة هذه المعلمة اختياريًا
  3. تعديل المَعلمات الاختيارية أو إزالتها (كما هو موضّح أعلاه)
<rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/">
    <GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>
    <GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware>
    <GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware>
    <GPano:ProjectionType>equirectangular</GPano:ProjectionType>
    <GPano:PoseHeadingDegrees>350.0</GPano:PoseHeadingDegrees>
    <GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees>
    <GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees>
    <GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees>
    <GPano:InitialHorizontalFOVDegrees>75.0</GPano:InitialHorizontalFOVDegrees>
    <GPano:CroppedAreaLeftPixels>0</GPano:CroppedAreaLeftPixels>
    <GPano:CroppedAreaTopPixels>0</GPano:CroppedAreaTopPixels>
    <GPano:CroppedAreaImageWidthPixels>4000</GPano:CroppedAreaImageWidthPixels>
    <GPano:CroppedAreaImageHeightPixels>2000</GPano:CroppedAreaImageHeightPixels>
    <GPano:FullPanoWidthPixels>4000</GPano:FullPanoWidthPixels>
    <GPano:FullPanoHeightPixels>2000</GPano:FullPanoHeightPixels>
    <GPano:FirstPhotoDate>2012-11-07T21:03:13.465Z</GPano:FirstPhotoDate>
    <GPano:LastPhotoDate>2012-11-07T21:04:10.897Z</GPano:LastPhotoDate>
    <GPano:SourcePhotosCount>50</GPano:SourcePhotosCount>
    <GPano:ExposureLockUsed>False</GPano:ExposureLockUsed>
</rdf:Description>

مثال على صورة بانورامية 360 درجة

<rdf:Description rdf:about="" xmlns:GPano="http://ns.google.com/photos/1.0/panorama/">
    <GPano:UsePanoramaViewer>True</GPano:UsePanoramaViewer>
    <GPano:CaptureSoftware>Photo Sphere</GPano:CaptureSoftware>
    <GPano:StitchingSoftware>Photo Sphere</GPano:StitchingSoftware>
    <GPano:ProjectionType>equirectangular</GPano:ProjectionType>
    <GPano:PoseHeadingDegrees>350.0</GPano:PoseHeadingDegrees>
    <GPano:InitialViewHeadingDegrees>90.0</GPano:InitialViewHeadingDegrees>
    <GPano:InitialViewPitchDegrees>0.0</GPano:InitialViewPitchDegrees>
    <GPano:InitialViewRollDegrees>0.0</GPano:InitialViewRollDegrees>
    <GPano:InitialHorizontalFOVDegrees>75.0</GPano:InitialHorizontalFOVDegrees>
    <GPano:CroppedAreaLeftPixels>90</GPano:CroppedAreaLeftPixels>
    <GPano:CroppedAreaTopPixels>128</GPano:CroppedAreaTopPixels>
    <GPano:CroppedAreaImageWidthPixels>2300</GPano:CroppedAreaImageWidthPixels>
    <GPano:CroppedAreaImageHeightPixels>1042</GPano:CroppedAreaImageHeightPixels>
    <GPano:FullPanoWidthPixels>4000</GPano:FullPanoWidthPixels>
    <GPano:FullPanoHeightPixels>2000</GPano:FullPanoHeightPixels>
    <GPano:FirstPhotoDate>2012-11-07T21:03:13.465Z</GPano:FirstPhotoDate>
    <GPano:LastPhotoDate>2012-11-07T21:04:10.897Z</GPano:LastPhotoDate>
    <GPano:SourcePhotosCount>50</GPano:SourcePhotosCount>
    <GPano:ExposureLockUsed>False</GPano:ExposureLockUsed>
</rdf:Description>

قوة تعديل الصور

ولكي يكون ذلك فعالاً، يجب على البرامج التي تعرض صور بانوراما 360 درجة في العارض التحقق مما إذا تم تغيير حجم الصورة الأصلية باستخدام تطبيق بدون تحديث البيانات الوصفية. يمكنك تنفيذ ذلك من خلال الخطوات التالية:

  1. التأكّد من أنّ علامة CroppedAreaImage widthPixels مساوية لعرض الصورة الفعلي
  2. التأكد من أن علامة CroppedAreaImageHeightPixels تساوي ارتفاع الصورة الفعلي
  3. إذا فشلت الخطوة 1 أو 2، تحقق مما إذا كان قد تم الحفاظ على نسبة العرض إلى الارتفاع للصورة
  4. إذا فشلت الخطوة 3، فلا تعرض الصورة على شكل صورة بانورامية 360 درجة حيث تم تحويلها بطريقة غير متوافقة تؤدي إلى تشويهات سيئة.
  5. إذا اجتزت الخطوة 3، تكون نسبة العرض إلى الارتفاع مكافئة، ويجب تغيير حجم جميع قيم العلامات المرتبطة في ما يلي لتلائم حجم الصورة الجديد:
    CroppedAreaImageSetupPixels وCroppedAreaImageHeightPixels وFullPano widthPixels وFullPanoHeightPixels وCroppedAreaLeftPixels وCroppedAreaRightPixels.

نظرة عامة على "أويلر أنغلز"

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

ويحدد الموضع فوق سطح الأرض "إطارًا محليًا" ثابتًا XYZ، حيث يكون Z في الأعلى وفي الوضع المتعامد مع سطح الأرض، ويحدد X حقيقة شرقًا، في حين يشير Y إلى الشمال الصحيح. يتم تحديد الاتجاه بالنسبة إلى هذا "الإطار المحلي" الثابت، وزوايا أويلر هي دورانات حول هذه المحاور XYZ الثابتة. وبالتالي، يكون اتجاه الوضع غير معرَّف عند الأقطاب. وهذا يعني أنه سيتم توجيه صورة بانورامية 360 درجة بزوايا (0، 0، 0) بحيث تكون واجهات البكسل المركزية باتجاه الشمال مع خط الاستواء للصورة البانورامية بموازي سطح الأرض.

توفر زوايا أويلر تعيينًا من النقاط في "إطار الصور البانورامية" (الذي تم تدويره) إلى نقاط في "الإطار المحلي" (الثابت):
 
يتم إنشاء مصفوفة دوران من زوايا أويلر على النحو التالي (من المهم الحفاظ على هذا الترتيب):

R = R_Z(-heading) * R_X(فقرة) * R_Y(roll)

حيث: R_*(t) هو تدوير باليد اليمنى حول المحور المسمى:

R_Z(angle) = [ cos(angle), -sin(angle), 0
sin(angle), cos(angle), 0
0, 0, 0, 1 ]
 
[ 1 (angle) = [ 1, )





وأين: Z = لأعلى، X = الشرق، Y = الشمال.

من المهم الحفاظ على هذا الترتيب:

R = R_Z(-heading) * R_X(فقرة) * R_Y(roll)

حيث إن عمليات التدوير ليست تبادلية.

لاحظ أن زاوية العنوان هي نفسها رأس البوصلة.

المراجع

Adobe XMP العادي: http://www.adobe.com/devnet/xmp.html