الفرق بين المراجعتين ل"Cordova/cordova plugin camera"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
سطر 62: سطر 62:
 
تُمرّر الصورة إلى دالة النجاح (success callback) كملف  مُرمّز بالترميز Base64، أو على هيئة عنوانٍ (URI) يشير إلى ملف الصورة.  
 
تُمرّر الصورة إلى دالة النجاح (success callback) كملف  مُرمّز بالترميز Base64، أو على هيئة عنوانٍ (URI) يشير إلى ملف الصورة.  
  
تفتح الدالة <code>String</code> تطبيق الكاميرا الافتراضي للجهاز، والذي يسمح للمستخدمين بالاقتطاف من الصور افتراضيًا - يحدث هذا السلوك، عندما يتساوى <code>camera.getPicture</code> و <code>Camera.sourceType</code>. بمجرد أن يلتقط المستخدم الصورة، يُغلق تطبيق الكاميرا ويُسترجع (restored) التطبيق.  
+
تفتح الدالة <code>camera.getPicture</code> تطبيق الكاميرا الافتراضي للجهاز، والذي يسمح للمستخدمين بالاقتطاف من الصور افتراضيًا - يحدث هذا السلوك، عندما يتساوى <code>Camera.sourceType</code> و [#module_Camera.PictureSourceType Camera.PictureSourceType.CAMERA]. بمجرد أن يلتقط المستخدم الصورة، يُغلق تطبيق الكاميرا ويُسترجع (restored) التطبيق.  
  
إن كانت الخاصية [#module_Camera.PictureSourceType Camera.PictureSourceType.CAMERA] تساوي <code>Camera.sourceType</code> أو <code>Camera.PictureSourceType.PHOTOLIBRARY</code>، فسيظهر مربع حوار يمكّن للمستخدمين من اختيار إحدى الصور الموجودة.  
+
إن كانت الخاصية <code>Camera.sourceType</code> تساوي <code>Camera.PictureSourceType.PHOTOLIBRARY</code> أو <code>Camera.PictureSourceType.SAVEDPHOTOALBUM</code>، فسيظهر مربع حوار يمكّن للمستخدمين من اختيار إحدى الصور الموجودة.  
  
تُرسل القيمة المعادة إلى دالة الاستجابة <code>Camera.PictureSourceType.SAVEDPHOTOALBUM</code>، وفق إحدى التنسيقات التالية، اعتمادًا على الخيار [#module_camera.onSuccess cameraSuccess] المحدد:  
+
تُرسل القيمة المعادة إلى دالة الاستجابة [#module_camera.onSuccess cameraSuccess]، وفق إحدى التنسيقات التالية، اعتمادًا على الخيار <code>cameraOptions</code> المحدد:  
* سلسلة نصية <code>cameraOptions</code> تحتوي على الترميز-Base64 الخاص بالصورة.  
+
* سلسلة نصية <code>String</code> تحتوي على الترميز-Base64 الخاص بالصورة.  
 
* سلسلة نصية <code>String</code> تمثل موضع ملف الصورة في الذاكرة المحلية (السلوك الافتراضي).  
 
* سلسلة نصية <code>String</code> تمثل موضع ملف الصورة في الذاكرة المحلية (السلوك الافتراضي).  
  
 
يمكنك أن تفعل ما تريد بالصورة المرمّزة أو عنواها، على سبيل المثال:  
 
يمكنك أن تفعل ما تريد بالصورة المرمّزة أو عنواها، على سبيل المثال:  
* عرض (Render) الصورة في الوسم <code>String</code>، كما هو موضح في المثال أدناه  
+
* عرض (Render) الصورة في الوسم <code><img></code>، كما هو موضح في المثال أدناه  
* حفظ البيانات محليا (<code><img></code>، <code>LocalStorage</code>، الخ)  
+
* حفظ البيانات محليا (<code>LocalStorage</code>، [http://brianleroux.github.com/lawnchair/ Lawnchair]، الخ)  
 
* نشر البيانات إلى خادم بعيد  
 
* نشر البيانات إلى خادم بعيد  
  
[http://brianleroux.github.com/lawnchair/ Lawnchair]: دقة الصور على الأجهزة الحديثة جيدة للغاية. لا تُصغّر جودة الصور المختارة من معرض الجهاز، حتى عند تحديد المعامل '''NOTE'''. لتجنب مشاكل الذاكرة الشائعة، اضبط قيمة <code>quality</code> عند <code>Camera.destinationType</code> بدلاً من <code>FILE_URI</code>.  
+
'''NOTE''': دقة الصور على الأجهزة الحديثة جيدة للغاية. لا تُصغّر جودة الصور المختارة من معرض الجهاز، حتى عند تحديد المعامل <code>quality</code>. لتجنب مشاكل الذاكرة الشائعة، اضبط قيمة <code>Camera.destinationType</code> عند <code>FILE_URI</code> بدلاً من <code>DATA_URL</code>.  
  
<code>DATA_URL</code>
+
'''Supported Platforms'''
 
*أندرويد  
 
*أندرويد  
 
*بلاك بيري  
 
*بلاك بيري  
سطر 88: سطر 88:
 
* أوبونتو  
 
* أوبونتو  
  
يمكن الحصول على المزيد من الأمثلة من '''Supported Platforms'''. كما يمكنك الاطلاع على بعض الملاحظات المخصوصة بمنصات محددة من [#camera-getPicture-examples here].  
+
يمكن الحصول على المزيد من الأمثلة من [#camera-getPicture-examples here]. كما يمكنك الاطلاع على بعض الملاحظات المخصوصة بمنصات محددة من [#camera-getPicture-quirks here].  
  
[#camera-getPicture-quirks here]: تابع ثابت (static method) للكائن '''Kind'''
+
'''Kind''': تابع ثابت (static method) للكائن <code>camera</code>
 
المعامل  
 
المعامل  
 
النوع  
 
النوع  
 
الشرح
 
الشرح
 
successCallback  
 
successCallback  
<code>camera</code>  
+
<code>onSuccess</code>  
 
errorCallback  
 
errorCallback  
<code>onSuccess</code>  
+
<code>onError</code>  
 
options  
 
options  
<code>onError</code>  
+
<code>CameraOptions</code>  
 
CameraOptions  
 
CameraOptions  
  
<code>CameraOptions</code>
 
 
'''Example'''  
 
'''Example'''  
 +
<syntaxhighlight lang="javascript">navigator.camera.getPicture(cameraSuccess, cameraError, cameraOptions);‎</syntaxhighlight>
  
  
 
===camera.cleanup()‎===  
 
===camera.cleanup()‎===  
  
يزيل هذا التابع ملفات الصور الوسطية التي تُحفظ في المخزن المؤقت بعد استدعاء <syntaxhighlight lang="javascript">navigator.camera.getPicture(cameraSuccess, cameraError, cameraOptions);‎</syntaxhighlight>. ويطبق فقط عندما تساوي [#module_camera.getPicture camera.getPicture] القيمة <code>Camera.sourceType</code> وتساوي <code>Camera.PictureSourceType.CAMERA</code> القيمة <code>Camera.destinationType</code>.  
+
يزيل هذا التابع ملفات الصور الوسطية التي تُحفظ في المخزن المؤقت بعد استدعاء [#module_camera.getPicture camera.getPicture]. ويطبق فقط عندما تساوي <code>Camera.sourceType</code> القيمة <code>Camera.PictureSourceType.CAMERA</code> وتساوي <code>Camera.destinationType</code> القيمة <code>Camera.DestinationType.FILE_URI</code>.  
  
<code>Camera.DestinationType.FILE_URI</code>
+
'''Supported Platforms'''
 
*iOS  
 
*iOS  
  
'''Supported Platforms''': تابع ثابت للكائن '''Kind'''
+
'''Kind''': تابع ثابت للكائن <code>camera</code>
<code>camera</code>  
 
 
'''Example'''  
 
'''Example'''  
 
===camera.onError : function===
 
 
دالة استجابة (Callback function) تُستخدم لتوفير رسالة خطأ.
 
 
 
<syntaxhighlight lang="javascript">navigator.camera.cleanup(onSuccess, onFail);
 
<syntaxhighlight lang="javascript">navigator.camera.cleanup(onSuccess, onFail);
 
function onSuccess() {
 
function onSuccess() {
سطر 127: سطر 121:
 
function onFail(message) {
 
function onFail(message) {
 
     alert('Failed because: ' + message);
 
     alert('Failed because: ' + message);
}‎</syntaxhighlight>:وسم typedef ثابت من الكائن '''Kind'''
+
}‎</syntaxhighlight>  
  
 +
===camera.onError : function===
 +
 +
دالة استجابة (Callback function) تُستخدم لتوفير رسالة خطأ.
 +
 +
'''Kind''':وسم typedef ثابت من الكائن <code>camera</code>
 
المعاملات  
 
المعاملات  
 
النوع  
 
النوع  
 
الشرح
 
الشرح
 
message  
 
message  
<code>camera</code>  
+
<code>string</code>  
 
يتم توفير الرسالة عبر الشيفرة الأصلية للجهاز.  
 
يتم توفير الرسالة عبر الشيفرة الأصلية للجهاز.  
  
سطر 141: سطر 140:
 
دالة استجابة تُوفّر بيانات الصورة.  
 
دالة استجابة تُوفّر بيانات الصورة.  
  
<code>string</code>: وسم typedef ثابت من الكائن '''Kind'''
+
'''Kind''': وسم typedef ثابت من الكائن <code>camera</code>  
 
المعاملات  
 
المعاملات  
 
النوع  
 
النوع  
 
الشرح
 
الشرح
 
imageData  
 
imageData  
<code>camera</code>  
+
<code>string</code>  
ترميز لبيانات الصورة وفق الترميز Base64، أو عنوان (URI) لملف الصورة، اعتمادًا على الخيار <code>string</code> الساري.  
+
ترميز لبيانات الصورة وفق الترميز Base64، أو عنوان (URI) لملف الصورة، اعتمادًا على الخيار [#module_camera.CameraOptions cameraOptions] الساري.  
  
[#module_camera.CameraOptions cameraOptions]
+
'''Example'''  
'''Example'''
+
<syntaxhighlight lang="javascript">// Show image
 +
//
 +
function cameraCallback(imageData) {
 +
  var image = document.getElementById('myImage');
 +
  image.src = "data:image/jpeg;base64," + imageData;
 +
}‎</syntaxhighlight>
  
  
سطر 157: سطر 161:
  
 
معاملات اختيارية لتخصيص إعدادات الكاميرا.  
 
معاملات اختيارية لتخصيص إعدادات الكاميرا.  
*<syntaxhighlight lang="javascript">// Show image
+
*[#CameraOptions-quirks Quirks]
//
 
function cameraCallback(imageData) {
 
  var image = document.getElementById('myImage');
 
  image.src = "data:image/jpeg;base64," + imageData;
 
}‎</syntaxhighlight>
 
  
[#CameraOptions-quirks Quirks]:وسم typedef ثابت من الكائن '''Kind'''
+
'''Kind''':وسم typedef ثابت من الكائن <code>camera</code>
<code>camera</code>  
+
'''Properties'''
 
الاسم  
 
الاسم  
 
النوع  
 
النوع  
سطر 171: سطر 170:
 
الشرح
 
الشرح
 
quality  
 
quality  
'''Properties'''
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>50</code>
 
جودة الصورة المحفوظة، مُعبّر عنها بعدد من المجال 0-100، حيث يمثل العدد 100 الدقة الكاملة، عادة بدون أي خسارة من ضغط الملفات. (لاحظ أن المعلومات حول دقة الكاميرا غير متوفرة.)  
 
جودة الصورة المحفوظة، مُعبّر عنها بعدد من المجال 0-100، حيث يمثل العدد 100 الدقة الكاملة، عادة بدون أي خسارة من ضغط الملفات. (لاحظ أن المعلومات حول دقة الكاميرا غير متوفرة.)  
 
destinationType  
 
destinationType  
<code>50</code>
 
 
<code>DestinationType</code>  
 
<code>DestinationType</code>  
 +
<code>FILE_URI</code>
 
اختر تنسيق القيمة المعادة.  
 
اختر تنسيق القيمة المعادة.  
 
sourceType  
 
sourceType  
<code>FILE_URI</code>
 
 
<code>PictureSourceType</code>  
 
<code>PictureSourceType</code>  
 +
<code>CAMERA</code>
 
تحديد مصدر الصورة.  
 
تحديد مصدر الصورة.  
 
allowEdit  
 
allowEdit  
<code>CAMERA</code>
 
 
<code>Boolean</code>  
 
<code>Boolean</code>  
 +
<code>false</code>
 
السماح بتعديل بسيط على الصورة قبل الاختيار.  
 
السماح بتعديل بسيط على الصورة قبل الاختيار.  
 
encodingType  
 
encodingType  
<code>false</code>
 
 
<code>EncodingType</code>  
 
<code>EncodingType</code>  
 +
<code>JPEG</code>
 
اختيار ترميز ملف الصورة المعادة.  
 
اختيار ترميز ملف الصورة المعادة.  
 
targetWidth  
 
targetWidth  
<code>JPEG</code>  
+
<code>number</code>  
  
العرض بالبكسل لتكبير الصورة. يجب استخدامه مع <code>number</code>. نسبة أبعاد الصورة (Aspect ratio) تبقى ثابتة.  
+
العرض بالبكسل لتكبير الصورة. يجب استخدامه مع <code>targetHeight</code>. نسبة أبعاد الصورة (Aspect ratio) تبقى ثابتة.  
 
targetHeight  
 
targetHeight  
<code>targetHeight</code>  
+
<code>number</code>  
  
الارتفاع بالبكسل لتكبير الصورة. يجب استخدامه مع <code>number</code>. نسبة أبعاد الصور تبقى ثابتة.  
+
الارتفاع بالبكسل لتكبير الصورة. يجب استخدامه مع <code>targetWidth</code>. نسبة أبعاد الصور تبقى ثابتة.  
 
mediaType  
 
mediaType  
<code>targetWidth</code>
 
 
<code>MediaType</code>  
 
<code>MediaType</code>  
تعيين نوع الوسائط (medias) المراد الاختيار من بينها. يعمل هذا المعامل فقط عندما يساوي <code>PICTURE</code> القيمة <code>PictureSourceType</code> أو <code>PHOTOLIBRARY</code>.  
+
<code>PICTURE</code>
 +
تعيين نوع الوسائط (medias) المراد الاختيار من بينها. يعمل هذا المعامل فقط عندما يساوي <code>PictureSourceType</code> القيمة <code>PHOTOLIBRARY</code> أو <code>SAVEDPHOTOALBUM</code>.  
 
correctOrientation  
 
correctOrientation  
<code>SAVEDPHOTOALBUM</code>  
+
<code>Boolean</code>  
  
 
تدوير الصورة لتصحيح اتجاه الجهاز أثناء التقاط الصورة.  
 
تدوير الصورة لتصحيح اتجاه الجهاز أثناء التقاط الصورة.  
سطر 211: سطر 210:
 
حفظ الصورة في ألبوم الصور على الجهاز بعد التقاطها.  
 
حفظ الصورة في ألبوم الصور على الجهاز بعد التقاطها.  
 
popoverOptions  
 
popoverOptions  
<code>Boolean</code>  
+
<code>CameraPopoverOptions</code>  
  
 
خيارات مخصوصة بمنصة iOS فقط، والتي تحدد موضع popover في iPad.  
 
خيارات مخصوصة بمنصة iOS فقط، والتي تحدد موضع popover في iPad.  
 
cameraDirection  
 
cameraDirection  
<code>CameraPopoverOptions</code>
 
 
<code>Direction</code>  
 
<code>Direction</code>  
 +
<code>BACK</code>
 
اختيار الكاميرا المراد استخدامها (االأمامية أو الخلفية).  
 
اختيار الكاميرا المراد استخدامها (االأمامية أو الخلفية).  
 +
  
  
سطر 226: سطر 226:
 
===Camera.DestinationType : enum===  
 
===Camera.DestinationType : enum===  
  
يُعرّف تنسيق مُخرجات استدعاء <code>BACK</code>. ملاحظة: على منصة iOS، تمرير <code>Camera.getPicture</code> مع <code>DestinationType.NATIVE_URI</code> أو <code>PictureSourceType.PHOTOLIBRARY</code> سيُعطل أي تعديلات على الصورة (تغيير الحجم، تغيير الجودة، الاقتصاص، إلخ) بسبب خصوصيات التقديم (implementation specific).  
+
يُعرّف تنسيق مُخرجات استدعاء <code>Camera.getPicture</code>. ملاحظة: على منصة iOS، تمرير <code>DestinationType.NATIVE_URI</code> مع <code>PictureSourceType.PHOTOLIBRARY</code> أو <code>PictureSourceType.SAVEDPHOTOALBUM</code> سيُعطل أي تعديلات على الصورة (تغيير الحجم، تغيير الجودة، الاقتصاص، إلخ) بسبب خصوصيات التقديم (implementation specific).  
  
<code>PictureSourceType.SAVEDPHOTOALBUM</code>: خاصية تعداد (enum) ثابتة للكائن '''Kind'''
+
'''Kind''': خاصية تعداد (enum) ثابتة للكائن <code>Camera</code>
<code>Camera</code>  
+
'''Properties'''
 
الاسم  
 
الاسم  
 
النوع  
 
النوع  
سطر 235: سطر 235:
 
الشرح
 
الشرح
 
DATA_URL  
 
DATA_URL  
'''Properties'''
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>0</code>
 
تُعاد سلسلة نصية وفق الترميز base64. تركز DATAURL كثيرًا على الذاكرة، وقد تتسبب في تعطل التطبيق أو نفاذ الذاكرة. استخدم FILEURI أو NATIVE_URI إن أمكن  
 
تُعاد سلسلة نصية وفق الترميز base64. تركز DATAURL كثيرًا على الذاكرة، وقد تتسبب في تعطل التطبيق أو نفاذ الذاكرة. استخدم FILEURI أو NATIVE_URI إن أمكن  
 
FILE_URI  
 
FILE_URI  
<code>0</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>1</code>
 
إعادة عنوان (uri ) الملف (content://media/external/images/media/2 لمنصة أندرويد)  
 
إعادة عنوان (uri ) الملف (content://media/external/images/media/2 لمنصة أندرويد)  
 
NATIVE_URI  
 
NATIVE_URI  
<code>1</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>2</code>
 
إعادة العنوان (uri) الأصلي (على سبيل المثال، asset-library://... لمنصة iOS)  
 
إعادة العنوان (uri) الأصلي (على سبيل المثال، asset-library://... لمنصة iOS)  
  
سطر 250: سطر 250:
 
===Camera.EncodingType : enum===  
 
===Camera.EncodingType : enum===  
  
<code>2</code>: خاصية تعداد (enum) ثابتة للكائن '''Kind'''
+
'''Kind''': خاصية تعداد (enum) ثابتة للكائن <code>Camera</code>
<code>Camera</code>  
+
'''Properties'''
 
الاسم  
 
الاسم  
 
النوع  
 
النوع  
سطر 257: سطر 257:
 
الشرح
 
الشرح
 
JPEG  
 
JPEG  
'''Properties'''
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>0</code>
 
تعيد هذه الخاصية صورة مشفرة وفق الترميز JPEG  
 
تعيد هذه الخاصية صورة مشفرة وفق الترميز JPEG  
 
PNG  
 
PNG  
<code>0</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>1</code>
 
تعيد صورة مشفرة وفق الترميز PNG  
 
تعيد صورة مشفرة وفق الترميز PNG  
  
سطر 268: سطر 268:
 
===Camera.MediaType : enum===  
 
===Camera.MediaType : enum===  
  
<code>1</code>: خاصية تعداد (enum) الثابت للكائن '''Kind'''
+
'''Kind''': خاصية تعداد (enum) الثابت للكائن <code>Camera</code>
<code>Camera</code>  
+
'''Properties'''
 
الاسم  
 
الاسم  
 
النوع  
 
النوع  
سطر 275: سطر 275:
 
الشرح
 
الشرح
 
PICTURE  
 
PICTURE  
'''Properties'''
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>0</code>
 
تمكن هذه الخاصية من اختيار الصور الثابتة وحسب. القيمة الافتراضية ستعيد التنسيق المحدد عبر DestinationType  
 
تمكن هذه الخاصية من اختيار الصور الثابتة وحسب. القيمة الافتراضية ستعيد التنسيق المحدد عبر DestinationType  
 
VIDEO  
 
VIDEO  
<code>0</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>1</code>
 
تسمح باختيار الفيديو فقط، وتعيد العنوان (URL) وحسب.  
 
تسمح باختيار الفيديو فقط، وتعيد العنوان (URL) وحسب.  
 
ALLMEDIA  
 
ALLMEDIA  
<code>1</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>2</code>
 
تسمح بالاختيار من جميع أنواع الوسائط  
 
تسمح بالاختيار من جميع أنواع الوسائط  
  
سطر 290: سطر 290:
 
===Camera.PictureSourceType : enum===  
 
===Camera.PictureSourceType : enum===  
  
يعرف تنسيق مُخرجات استدعاء <code>2</code>. ملاحظة: على منصة iOS، الذي تمرير <code>Camera.getPicture</code> أو <code>PictureSourceType.PHOTOLIBRARY</code> إلى جانب <code>PictureSourceType.SAVEDPHOTOALBUM</code> سيعطل أي تعديلات على الصورة (تغيير الحجم أو تغيير الجودة أو الافتصاص إلخ) بسبب اختلاف طرق التقديم (implementation).  
+
يعرف تنسيق مُخرجات استدعاء <code>Camera.getPicture</code>. ملاحظة: على منصة iOS، الذي تمرير <code>PictureSourceType.PHOTOLIBRARY</code> أو <code>PictureSourceType.SAVEDPHOTOALBUM</code> إلى جانب <code>DestinationType.NATIVE_URI</code> سيعطل أي تعديلات على الصورة (تغيير الحجم أو تغيير الجودة أو الافتصاص إلخ) بسبب اختلاف طرق التقديم (implementation).  
  
<code>DestinationType.NATIVE_URI</code>: خاصية تعداد (enum) ثابتة للكائن '''Kind'''
+
'''Kind''': خاصية تعداد (enum) ثابتة للكائن <code>Camera</code>
<code>Camera</code>  
+
'''Properties'''
 
الاسم  
 
الاسم  
 
النوع  
 
النوع  
سطر 299: سطر 299:
 
الشرح
 
الشرح
 
PHOTOLIBRARY  
 
PHOTOLIBRARY  
'''Properties'''
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>0</code>
 
اختيار صورة من مكتبة الصور في بالجهاز (تشبه SAVEDPHOTOALBUM في أندرويد)  
 
اختيار صورة من مكتبة الصور في بالجهاز (تشبه SAVEDPHOTOALBUM في أندرويد)  
 
CAMERA  
 
CAMERA  
<code>0</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>1</code>
 
التقاط صورة عبر الكاميرا  
 
التقاط صورة عبر الكاميرا  
 
SAVEDPHOTOALBUM  
 
SAVEDPHOTOALBUM  
<code>1</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>2</code>
 
اختيار صورة من ألبوم Camera Roll الموجود في الجهاز (مثل PHOTOLIBRARY في منصة أندرويد)  
 
اختيار صورة من ألبوم Camera Roll الموجود في الجهاز (مثل PHOTOLIBRARY في منصة أندرويد)  
  
سطر 316: سطر 316:
 
تطابق الثوابت UIPopoverArrowDirection الخاصة بمنصة iOS لتحديد موضع السهم (arrow location) على العنصر المنبثق popover.  
 
تطابق الثوابت UIPopoverArrowDirection الخاصة بمنصة iOS لتحديد موضع السهم (arrow location) على العنصر المنبثق popover.  
  
<code>2</code>: خاصية تعداد (enum) ثابتة للكائن '''Kind'''
+
'''Kind''': خاصية تعداد (enum) ثابتة للكائن <code>Camera</code>
<code>Camera</code>  
+
'''Properties'''
 
الاسم  
 
الاسم  
 
النوع  
 
النوع  
 
القيمة الافتراضية
 
القيمة الافتراضية
 
ARROW_UP  
 
ARROW_UP  
'''Properties'''
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>1</code>
 
ARROW_DOWN  
 
ARROW_DOWN  
<code>1</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>2</code>
 
ARROW_LEFT  
 
ARROW_LEFT  
<code>2</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>4</code>
 
ARROW_RIGHT  
 
ARROW_RIGHT  
<code>4</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>8</code>
 
ARROW_ANY  
 
ARROW_ANY  
<code>8</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>15</code>
  
  
 
===Camera.Direction : enum===  
 
===Camera.Direction : enum===  
  
<code>15</code>: خاصية تعداد (enum) ثابتة للكائن '''Kind'''
+
'''Kind''': خاصية تعداد (enum) ثابتة للكائن <code>Camera</code>
<code>Camera</code>  
+
'''Properties'''
 
الاسم  
 
الاسم  
 
النوع  
 
النوع  
سطر 347: سطر 347:
 
الشرح
 
الشرح
 
BACK  
 
BACK  
'''Properties'''
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>0</code>
 
استخدام الكاميرا الخلفية  
 
استخدام الكاميرا الخلفية  
 
FRONT  
 
FRONT  
<code>0</code>
 
 
<code>number</code>  
 
<code>number</code>  
 +
<code>1</code>
 
استخدام الكاميرا الأمامية  
 
استخدام الكاميرا الأمامية  
 +
  
  
سطر 365: سطر 366:
 
الشرح
 
الشرح
 
[x]  
 
[x]  
<code>1</code>
 
 
<code>Number</code>  
 
<code>Number</code>  
 +
<code>0</code>
 
عدد يمث إحداثية الأفاصيل (x) بالبكسل من عنصر الشاشة الذي يُرسى عليه العنصر المنبثق.  
 
عدد يمث إحداثية الأفاصيل (x) بالبكسل من عنصر الشاشة الذي يُرسى عليه العنصر المنبثق.  
 
[y]  
 
[y]  
<code>0</code>
 
 
<code>Number</code>  
 
<code>Number</code>  
 +
<code>32</code>
 
عدد يمث إحداثية الأراتيب (y) بالبكسل من عنصر الشاشة الذي يُرسى عليه العنصر المنبثق.  
 
عدد يمث إحداثية الأراتيب (y) بالبكسل من عنصر الشاشة الذي يُرسى عليه العنصر المنبثق.  
 
[width]  
 
[width]  
<code>32</code>
 
 
<code>Number</code>  
 
<code>Number</code>  
 +
<code>320</code>
 
العرض، بالبكسل، لعنصر الشاشة الذي يُرسى عليه العنصر المنبثق.  
 
العرض، بالبكسل، لعنصر الشاشة الذي يُرسى عليه العنصر المنبثق.  
 
[height]  
 
[height]  
<code>320</code>
 
 
<code>Number</code>  
 
<code>Number</code>  
 +
<code>480</code>
 
الارتفاع بالبكسل، لعنصر الشاشة الذي يُرسى عليه العنصر المنبثق.  
 
الارتفاع بالبكسل، لعنصر الشاشة الذي يُرسى عليه العنصر المنبثق.  
 
[arrowDir]  
 
[arrowDir]  
<code>480</code>
 
 
<code>PopoverArrowDirection</code>  
 
<code>PopoverArrowDirection</code>  
 +
<code>ARROW_ANY</code>
 
الاتجاه الذي يجب أن يشير إليه السهم العنصر المنبثق.  
 
الاتجاه الذي يجب أن يشير إليه السهم العنصر المنبثق.  
 +
  
  
سطر 391: سطر 393:
 
مقبض (handle) لعارض صور منبثق (image picker popover).  
 
مقبض (handle) لعارض صور منبثق (image picker popover).  
  
<code>ARROW_ANY</code>
+
'''Supported Platforms'''
 
*iOS  
 
*iOS  
  
'''Supported Platforms'''
 
 
'''Example'''  
 
'''Example'''  
 
 
== camera.getPicture Errata ==
 
==== مثال ====
 
 
المثال التالي سيلتقط صورة ويستعيد موضع ملف الصورة:
 
 
<syntaxhighlight lang="javascript">navigator.camera.getPicture(onSuccess, onFail,
 
<syntaxhighlight lang="javascript">navigator.camera.getPicture(onSuccess, onFail,
 
{
 
{
سطر 415: سطر 410:
 
}‎</syntaxhighlight>  
 
}‎</syntaxhighlight>  
  
التقاط صورة واستردادها وفق الترميز Base64:  
+
 
 +
== camera.getPicture Errata ==
 +
==== مثال ====
 +
 
 +
المثال التالي سيلتقط صورة ويستعيد موضع ملف الصورة:  
 
<syntaxhighlight lang="javascript">navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
 
<syntaxhighlight lang="javascript">navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
 
     destinationType: Camera.DestinationType.FILE_URI });
 
     destinationType: Camera.DestinationType.FILE_URI });
سطر 425: سطر 424:
 
     alert('Failed because: ' + message);
 
     alert('Failed because: ' + message);
 
}‎</syntaxhighlight>  
 
}‎</syntaxhighlight>  
==== التفضيلات (iOS) ====
+
 
* <syntaxhighlight lang="javascript">/**
+
التقاط صورة واستردادها وفق الترميز Base64:
 +
<syntaxhighlight lang="javascript">/**
 
  * Warning: Using DATA_URL is not recommended! The DATA_URL destination
 
  * Warning: Using DATA_URL is not recommended! The DATA_URL destination
 
  * type is very memory intensive, even with a low quality setting. Using it
 
  * type is very memory intensive, even with a low quality setting. Using it
سطر 441: سطر 441:
 
function onFail(message) {
 
function onFail(message) {
 
     alert('Failed because: ' + message);
 
     alert('Failed because: ' + message);
}‎</syntaxhighlight> (قيمة منطقية، القيمة الافتراضية تساوي false). لالتقاط صور JPEG، اضبط هذا الخيار عند القيمة true للحصول على بيانات الموقع الجغرافي في رأس الملف EXIF. سيؤدي هذا إلى إرسال طلبية للحصول على أذونات تحديد الموقع الجغرافي إذا تم تعيينها عند القيمة true.  
+
}‎</syntaxhighlight>  
'''CameraUsesGeolocation'''
+
==== التفضيلات (iOS) ====
 +
* '''CameraUsesGeolocation''' (قيمة منطقية، القيمة الافتراضية تساوي false). لالتقاط صور JPEG، اضبط هذا الخيار عند القيمة true للحصول على بيانات الموقع الجغرافي في رأس الملف EXIF. سيؤدي هذا إلى إرسال طلبية للحصول على أذونات تحديد الموقع الجغرافي إذا تم تعيينها عند القيمة true.  
 +
<syntaxhighlight lang="javascript"><preference name="CameraUsesGeolocation" value="false" />‎</syntaxhighlight>
 
==== ملاحظات خاصة بمنصة Amazon Fire ====  
 
==== ملاحظات خاصة بمنصة Amazon Fire ====  
  
سطر 448: سطر 450:
 
====ملاحظات خاصة بمنصة أندرويد ====  
 
====ملاحظات خاصة بمنصة أندرويد ====  
  
يستخدم أندرويد المقاصد (intents) لإطلاق [[Cordova/Activity|نشاط]] الكاميرا على الجهاز لالتقاط الصور، وعلى الهواتف ذات الذاكرة المنخفضة، قد يفشل [[Cordova/Activity|النشاط]]. في هذه الحالة، سيتم تسليم النتيجة المعادة من استدعاء الإضافة عبر الحدث resume. راجع صفحة <syntaxhighlight lang="javascript"><preference name="CameraUsesGeolocation" value="false" />‎</syntaxhighlight> لمزيد من المعلومات. ستحتوي [http://cordova.apache.org/docs/en/dev/guide/platforms/android/lifecycle.html the Android Lifecycle guide] على القيمة التي ستُمرّر إلى الاستجابات - callbacks - (إما عنوان URL أو رسالة خطأ). تحقق من <code>pendingResult.result</code> لتحديد ما إذا كان الاستدعاء ناجحًا أم لا.  
+
يستخدم أندرويد المقاصد (intents) لإطلاق [[Cordova/Activity|نشاط]] الكاميرا على الجهاز لالتقاط الصور، وعلى الهواتف ذات الذاكرة المنخفضة، قد يفشل [[Cordova/Activity|النشاط]]. في هذه الحالة، سيتم تسليم النتيجة المعادة من استدعاء الإضافة عبر الحدث resume. راجع صفحة [http://cordova.apache.org/docs/en/dev/guide/platforms/android/lifecycle.html the Android Lifecycle guide] لمزيد من المعلومات. ستحتوي <code>pendingResult.result</code> على القيمة التي ستُمرّر إلى الاستجابات - callbacks - (إما عنوان URL أو رسالة خطأ). تحقق من <code>pendingResult.pluginStatus</code> لتحديد ما إذا كان الاستدعاء ناجحًا أم لا.  
 
==== ملاحظات خاصة بالمتصفحات (Browsers) ====  
 
==== ملاحظات خاصة بالمتصفحات (Browsers) ====  
  
سطر 454: سطر 456:
 
==== ملاحظات خاصة بمنصة Firefox ====  
 
==== ملاحظات خاصة بمنصة Firefox ====  
  
يتم حاليًا تقديم الإضافة Camera باستخدام <code>pendingResult.pluginStatus</code>.  
+
يتم حاليًا تقديم الإضافة Camera باستخدام [https://hacks.mozilla.org/2013/01/introducing-web-activities/ Web Activities].  
 
==== ملاحظات خاصة بمنصة iOS ====  
 
==== ملاحظات خاصة بمنصة iOS ====  
  
يمكن أن يتسبب تضمين دالة [[JavaScript|جافااسكريبت]] [https://hacks.mozilla.org/2013/01/introducing-web-activities/ Web Activities] في أي من دوال الاستجابة إلى حدوث مشاكل. غلّف التنبيه داخل الدالة <code>alert()</code> للسماح لمنتقي الصور الخاص أو العنصر المنبثق popover بمنصة iOS لأجل الإغلاق الكامل قبل عرض التنبيه:  
+
يمكن أن يتسبب تضمين دالة [[JavaScript|[[Java|جافا]]اسكريبت]] <code>alert()</code> في أي من دوال الاستجابة إلى حدوث مشاكل. غلّف التنبيه داخل الدالة <code>setTimeout()</code> للسماح لمنتقي الصور الخاص أو العنصر المنبثق popover بمنصة iOS لأجل الإغلاق الكامل قبل عرض التنبيه:  
<code>setTimeout()</code>  
+
<syntaxhighlight lang="javascript">setTimeout(function() {
 +
    // do your thing here!
 +
}, 0);‎</syntaxhighlight>  
 
==== ملاحظات خاصة بمنصة Windows Phone 7 ====  
 
==== ملاحظات خاصة بمنصة Windows Phone 7 ====  
  
سطر 464: سطر 468:
 
==== ملاحظات خاصة بمنصة ويندوز ====  
 
==== ملاحظات خاصة بمنصة ويندوز ====  
  
على منصة Windows Phone 8.1، استخدام <syntaxhighlight lang="javascript">setTimeout(function() {
+
على منصة Windows Phone 8.1، استخدام <code>SAVEDPHOTOALBUM</code> أو <code>PHOTOLIBRARY</code> كنوع مصدري (source type) سيؤدي إلى تجميد التطبيق إلى حين إعادة منتقي الملفات (file picker) للصورة المختارة، ثم يستأنف بصفحة البداية كما هو موضح في ملف التطبيق <code>config.xml</code>. في حالة استدعاء <code>camera.getPicture</code> من صفحة أخرى، سيؤدي ذلك إلى إعادة تحميل صفحة البداية ثانية، ولن تُستدعى دالتا النجاح والخطأ.  
    // do your thing here!
 
}, 0);‎</syntaxhighlight> أو <code>SAVEDPHOTOALBUM</code> كنوع مصدري (source type) سيؤدي إلى تجميد التطبيق إلى حين إعادة منتقي الملفات (file picker) للصورة المختارة، ثم يستأنف بصفحة البداية كما هو موضح في ملف التطبيق <code>PHOTOLIBRARY</code>. في حالة استدعاء <code>config.xml</code> من صفحة أخرى، سيؤدي ذلك إلى إعادة تحميل صفحة البداية ثانية، ولن تُستدعى دالتا النجاح والخطأ.  
 
  
 
لتجنب هذا نقترح استخدام نمط التطبيقات أحادية الصفحة (SPA)، أو استدعاء <code>camera.getPicture</code> فقط لأجل صفحة بدء التطبيق.  
 
لتجنب هذا نقترح استخدام نمط التطبيقات أحادية الصفحة (SPA)، أو استدعاء <code>camera.getPicture</code> فقط لأجل صفحة بدء التطبيق.  
  
المزيد من المعلومات حول الواجهات البرمجية لمنتقي Windows Phone 8.1 راجع هذه الصفحة: <code>camera.getPicture</code>
+
المزيد من المعلومات حول الواجهات البرمجية لمنتقي Windows Phone 8.1 راجع هذه الصفحة: [https://msdn.microsoft.com/en-us/library/windows/apps/dn720490.aspx How to continue your Windows Phone app after calling a file picker]
 
==== ملاحظات خاصة بمنصة Tizen ====  
 
==== ملاحظات خاصة بمنصة Tizen ====  
  
لا تدعم Tizen إلا [https://msdn.microsoft.com/en-us/library/windows/apps/dn720490.aspx How to continue your Windows Phone app after calling a file picker] الخاصة بـ <code>destinationType</code> أو <code>Camera.DestinationType.FILE_URI</code> الخاصة بـ <code>sourceType</code>.
+
لا تدعم Tizen إلا <code>destinationType</code> الخاصة بـ <code>Camera.DestinationType.FILE_URI</code> أو <code>sourceType</code> الخاصة بـ <code>Camera.PictureSourceType.PHOTOLIBRARY</code>.
  
  
 
==CameraOptions Errata==  
 
==CameraOptions Errata==  
 
==== ملاحظات خاصة بمنصة Amazon Fire ====  
 
==== ملاحظات خاصة بمنصة Amazon Fire ====  
* ستُنتج القيمةُ <code>Camera.PictureSourceType.PHOTOLIBRARY</code> صورًا خلفية (back-facing photos).  
+
* ستُنتج القيمةُ <code>cameraDirection</code> صورًا خلفية (back-facing photos).  
* تتجاهل هذه المنصة المعامل <code>cameraDirection</code>.  
+
* تتجاهل هذه المنصة المعامل <code>allowEdit</code>.  
* يعرض كل من <code>allowEdit</code> و <code>Camera.PictureSourceType.PHOTOLIBRARY</code> نفس ألبوم الصور.  
+
* يعرض كل من <code>Camera.PictureSourceType.PHOTOLIBRARY</code> و <code>Camera.PictureSourceType.SAVEDPHOTOALBUM</code> نفس ألبوم الصور.  
 
====ملاحظات خاصة بمنصة أندرويد ====  
 
====ملاحظات خاصة بمنصة أندرويد ====  
* ستُنتجُ القيمةُ <code>Camera.PictureSourceType.SAVEDPHOTOALBUM</code> صورًا خلفية (back-facing photo).  
+
* ستُنتجُ القيمةُ <code>cameraDirection</code> صورًا خلفية (back-facing photo).  
* <code>cameraDirection</code> في أندرويد تحاول هذه الإضافة العثور على تطبيق واستخدامه على جهاز المستخدم لأجل الاقتصاص (cropping) من الصورة. لا تتحكم الإضافة في التطبيق الذي يحدده المستخدم لإجراء عملية اقتصاص الصور، ومن المحتمل جدًا أن يختار المستخدم خيارًا غير متوافقٍ، ويتسبب في فشل الإضافة. يعمل هذا الأمر في بعض الأحيان لأن معظم الأجهزة مُزوّدة بتطبيقٍ يعالج الاقتصاص بطريقة متوافقة مع هذه الإضافة (صور Google Plus)، ولكن لا يمكن الاعتماد على هذا دائمًا. إن كان تعديل الصور أمرًا ضروريًا لتطبيقك، فكّر في البحث عن مكتبة أو إضافة خارجية توفر أداة أكثر كفاءة في تعديل للصور.  
+
* '''allowEdit  is unpredictable on Android and it should not be used!''' في أندرويد تحاول هذه الإضافة العثور على تطبيق واستخدامه على جهاز المستخدم لأجل الاقتصاص (cropping) من الصورة. لا تتحكم الإضافة في التطبيق الذي يحدده المستخدم لإجراء عملية اقتصاص الصور، ومن المحتمل جدًا أن يختار المستخدم خيارًا غير متوافقٍ، ويتسبب في فشل الإضافة. يعمل هذا الأمر في بعض الأحيان لأن معظم الأجهزة مُزوّدة بتطبيقٍ يعالج الاقتصاص بطريقة متوافقة مع هذه الإضافة (صور Google Plus)، ولكن لا يمكن الاعتماد على هذا دائمًا. إن كان تعديل الصور أمرًا ضروريًا لتطبيقك، فكّر في البحث عن مكتبة أو إضافة خارجية توفر أداة أكثر كفاءة في تعديل للصور.  
* يعرض كل من '''allowEdit  is unpredictable on Android and it should not be used!''' و <code>Camera.PictureSourceType.PHOTOLIBRARY</code> نفس ألبوم الصور.  
+
* يعرض كل من <code>Camera.PictureSourceType.PHOTOLIBRARY</code> و <code>Camera.PictureSourceType.SAVEDPHOTOALBUM</code> نفس ألبوم الصور.  
* تتجاهل منصة المعامل <code>Camera.PictureSourceType.SAVEDPHOTOALBUM</code> إن لم تكن الصورة معدلة (أي إن كانت <code>encodingType</code> تساوي 100، وكانت <code>quality</code> تساوي false، ولم يُحدد لا <code>correctOrientation</code> أو <code>targetHeight</code>). سيُعيد مصدر <code>targetWidth</code> دائمًا ملف JPEG المعطى من قبل الكاميرا الأصليةـ وسيُعيد مصدرا <code>CAMERA</code> و <code>PHOTOLIBRARY</code> الملف المحدد وفق ترميزه الحالي.  
+
* تتجاهل منصة المعامل <code>encodingType</code> إن لم تكن الصورة معدلة (أي إن كانت <code>quality</code> تساوي 100، وكانت <code>correctOrientation</code> تساوي false، ولم يُحدد لا <code>targetHeight</code> أو <code>targetWidth</code>). سيُعيد مصدر <code>CAMERA</code> دائمًا ملف JPEG المعطى من قبل الكاميرا الأصليةـ وسيُعيد مصدرا <code>PHOTOLIBRARY</code> و <code>SAVEDPHOTOALBUM</code> الملف المحدد وفق ترميزه الحالي.  
 
==== ملاحظات خاصة بمنصة BlackBerry 10 ====  
 
==== ملاحظات خاصة بمنصة BlackBerry 10 ====  
* تتجاهل هذه المنصة المعامل <code>SAVEDPHOTOALBUM</code>.  
+
* تتجاهل هذه المنصة المعامل <code>quality</code>.  
* تتجاهل المعامل <code>quality</code>.
+
* تتجاهل المعامل <code>allowEdit</code>.  
* <code>allowEdit</code> غير مدعوم.  
+
* <code>Camera.MediaType</code> غير مدعوم.  
* تتجاهل المعامل <code>Camera.MediaType</code>.  
 
 
* تتجاهل المعامل <code>correctOrientation</code>.  
 
* تتجاهل المعامل <code>correctOrientation</code>.  
 +
* تتجاهل المعامل <code>cameraDirection</code>.
 
==== ملاحظات خاصة بمنصة Firefox ====  
 
==== ملاحظات خاصة بمنصة Firefox ====  
* تتجاهل هذه المنصة المعامل <code>cameraDirection</code>.  
+
* تتجاهل هذه المنصة المعامل <code>quality</code>.  
* يتم تجاهل <code>quality</code> وتساوي <code>Camera.DestinationType</code> (عنوان [URI] ملف الصورة)  
+
* يتم تجاهل <code>Camera.DestinationType</code> وتساوي <code>1</code> (عنوان [URI] ملف الصورة)  
* تتجاهل المعامل <code>1</code>.  
+
* تتجاهل المعامل <code>allowEdit</code>.  
* تتجاهل المعامل <code>allowEdit</code> (يختاره المستخدم من نافذة الحوار)  
+
* تتجاهل المعامل <code>PictureSourceType</code> (يختاره المستخدم من نافذة الحوار)  
* تتجاهل <code>PictureSourceType</code>  
+
* تتجاهل <code>encodingType</code>  
* تتجاهل <code>encodingType</code> و <code>targetWidth</code>
+
* تتجاهل <code>targetWidth</code> و <code>targetHeight</code>  
* <code>targetHeight</code> غير مدعوم.
+
* <code>Camera.MediaType</code> غير مدعوم.  
* تتجاهل المعامل <code>Camera.MediaType</code>.  
 
 
* تتجاهل المعامل <code>correctOrientation</code>.  
 
* تتجاهل المعامل <code>correctOrientation</code>.  
 +
* تتجاهل المعامل <code>cameraDirection</code>.
 
==== ملاحظات خاصة بمنصة iOS ====  
 
==== ملاحظات خاصة بمنصة iOS ====  
* عند استخدام <code>cameraDirection</code>، تُحفظ الصور في المجلد المؤقت للتطبيق. تُحذف محتويات مجلد التطبيق المؤقت عند انتهاء التطبيق.  
+
* عند استخدام <code>destinationType.FILE_URI</code>، تُحفظ الصور في المجلد المؤقت للتطبيق. تُحذف محتويات مجلد التطبيق المؤقت عند انتهاء التطبيق.  
* عند استخدام <code>destinationType.FILE_URI</code> و <code>destinationType.NATIVE_URI</code>، تُحفظ الصور في ألبوم الصور المحفوظة، بغض النظر عن قيمة المعامل <code>sourceType.CAMERA</code>.  
+
* عند استخدام <code>destinationType.NATIVE_URI</code> و <code>sourceType.CAMERA</code>، تُحفظ الصور في ألبوم الصور المحفوظة، بغض النظر عن قيمة المعامل <code>saveToPhotoAlbum</code>.  
* عند استخدام <code>saveToPhotoAlbum</code> و <code>destinationType.NATIVE_URI</code> أو <code>sourceType.PHOTOLIBRARY</code>، يتم تجاهل جميع خيارات التعديل، ويعاد رابط إلى الصورة الأصلية.  
+
* عند استخدام <code>destinationType.NATIVE_URI</code> و <code>sourceType.PHOTOLIBRARY</code> أو <code>sourceType.SAVEDPHOTOALBUM</code>، يتم تجاهل جميع خيارات التعديل، ويعاد رابط إلى الصورة الأصلية.  
 
==== ملاحظات خاصة بمنصة Tizen ====  
 
==== ملاحظات خاصة بمنصة Tizen ====  
 
* الخيارات (options) غير مدعومة  
 
* الخيارات (options) غير مدعومة  
 
* يُعاد دائمًا عنوان ملف (FILE URI)  
 
* يُعاد دائمًا عنوان ملف (FILE URI)  
 
==== ملاحظات خاصة بمنصتي Windows Phone الإصدارين 7 و 8 ====  
 
==== ملاحظات خاصة بمنصتي Windows Phone الإصدارين 7 و 8 ====  
* تتجاهل هاتان المنصتان المعامل <code>sourceType.SAVEDPHOTOALBUM</code>.
+
* تتجاهل هاتان المنصتان المعامل <code>allowEdit</code>.  
* تتجاهل المنصتان المعامل <code>allowEdit</code>.  
 
 
* تتجاهل المنصتان المعامل <code>correctOrientation</code>.  
 
* تتجاهل المنصتان المعامل <code>correctOrientation</code>.  
* تتجاهل المنصتان المعامل <code>cameraDirection</code>. ملاحظة هامة: دائمًا تُنسخ الصور التي تم التقاطها باستخدام الواجهة البرمجية للإضافة Cordova camera على ويندوز 8 (WP8/8) الواجهة في ذاكرة (roll) الكاميرا الخاصة بالهاتف. استنادًا إلى إعدادات المستخدم، قد يعني هذا أيضًا أن الصورة ستُحمّل تلقائيًا إلى الخدمة OneDrive. يمكن أن يعني هذا أن الصورة ستكون متاحة لجمهور أكبر من الجمهور الذي يستهدفه تطبيقك. إن كانت هذه مشكلة لتطبيقك، فستحتاج إلى تقديم CameraCaptureTask كما هو مبيّن في توثيق <code>saveToPhotoAlbum</code>. يمكنك أن تقوم أيضًا بالتعليق أو التصويت لصالح حل المشكلة في [http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394006.aspx documented on MSDN].  
+
* تتجاهل المنصتان المعامل <code>cameraDirection</code>.
* تتجاهل المنصتان خاصية [https://issues.apache.org/jira/browse/CB-2083 issue tracker] في <code>mediaType</code>، لأن بيئة العمل SDK في منصة Windows Phone لا توفر طريقة لاختيار مقاطع الفيديو من PHOTOLIBRARY.  
+
* تتجاهل المنصتان المعامل <code>saveToPhotoAlbum</code>. ملاحظة هامة: دائمًا تُنسخ الصور التي تم التقاطها باستخدام الواجهة البرمجية للإضافة Cordova camera على ويندوز 8 (WP8/8) الواجهة في ذاكرة (roll) الكاميرا الخاصة بالهاتف. استنادًا إلى إعدادات المستخدم، قد يعني هذا أيضًا أن الصورة ستُحمّل تلقائيًا إلى الخدمة OneDrive. يمكن أن يعني هذا أن الصورة ستكون متاحة لجمهور أكبر من الجمهور الذي يستهدفه تطبيقك. إن كانت هذه مشكلة لتطبيقك، فستحتاج إلى تقديم CameraCaptureTask كما هو مبيّن في توثيق [http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394006.aspx documented on MSDN]. يمكنك أن تقوم أيضًا بالتعليق أو التصويت لصالح حل المشكلة في [https://issues.apache.org/jira/browse/CB-2083 issue tracker].
 +
* تتجاهل المنصتان خاصية <code>mediaType</code> في <code>cameraOptions</code>، لأن بيئة العمل SDK في منصة Windows Phone لا توفر طريقة لاختيار مقاطع الفيديو من PHOTOLIBRARY.  
  
 
== عينة: التقاط الصور، اختيار الصور من مكتبة الصور، والحصول على الصور المصغرة ==  
 
== عينة: التقاط الصور، اختيار الصور من مكتبة الصور، والحصول على الصور المصغرة ==  
  
 
تتيح لك الإضافة Camera إجراء أشياء مثل فتح كاميرا الجهاز والتقاط صورة، أو فتح منتقي الملفات واختيار ملف معيّن. توضح الشيفرات البرمجية في هذا القسم مختلف المهام الممكنة، بما في ذلك:  
 
تتيح لك الإضافة Camera إجراء أشياء مثل فتح كاميرا الجهاز والتقاط صورة، أو فتح منتقي الملفات واختيار ملف معيّن. توضح الشيفرات البرمجية في هذا القسم مختلف المهام الممكنة، بما في ذلك:  
* فتح الكاميرا والتقاط صورة <code>cameraOptions</code>
+
* فتح الكاميرا والتقاط صورة [#takePicture take a Picture]
* التقاط صورة وإعادة صورة مصغرة [#takePicture take a Picture] (صورة مُعدلة الحجم)  
+
* التقاط صورة وإعادة صورة مصغرة [#getThumbnails return thumbnails] (صورة مُعدلة الحجم)  
* التقاط صورة و [#getThumbnails return thumbnails]  
+
* التقاط صورة و [#convert generate a FileEntry object]  
* [#convert generate a FileEntry object] اختيار صورة من مكتبة الصور  
+
* [#selectFile Select a file] اختيار صورة من مكتبة الصور  
* اختيار صورة بتنسيق JPEG وإعادة صورة مصغرة [#selectFile Select a file] (صورة مُعدلة الحجم)  
+
* اختيار صورة بتنسيق JPEG وإعادة صورة مصغرة [#getFileThumbnails return thumbnails] (صورة مُعدلة الحجم)  
* اختيار صورة و [#getFileThumbnails return thumbnails]  
+
* اختيار صورة و [#convert generate a FileEntry object]  
  
 
== التقاط صورة ==  
 
== التقاط صورة ==  
  
قبل أن تتمكن من التقاط صورة، تحتاج أولا إلى ضبط بعض خيارات إضافة الكاميرا لكي تُمرّر إلى دالة الإضافة [#convert generate a FileEntry object] . هذه مجموعة من التوصيات المهمة. في هذا المثال، ستُنشئ الكائن الذي ستستخدمه لأجل خيارات الكاميرا، وستُعيّن <code>getPicture</code> ديناميكيًا لدعم كل من إضافة الكاميرا ومنتقي الملفات.  
+
قبل أن تتمكن من التقاط صورة، تحتاج أولا إلى ضبط بعض خيارات إضافة الكاميرا لكي تُمرّر إلى دالة الإضافة <code>getPicture</code> . هذه مجموعة من التوصيات المهمة. في هذا المثال، ستُنشئ الكائن الذي ستستخدمه لأجل خيارات الكاميرا، وستُعيّن <code>sourceType</code> ديناميكيًا لدعم كل من إضافة الكاميرا ومنتقي الملفات.  
<code>sourceType</code>
+
<syntaxhighlight lang="javascript">function setOptions(srcType) {
 
 
في العادة، ستحتاج إلى استخدام FILEURI بدلاً من DATAURL لتجنب معظم مشاكل الذاكرة. JPEG هو الترميز الموصى به في منصة أندرويد.
 
 
 
يمكنك التقاط صورة من خلال تمرير كائن الخيارات إلى <syntaxhighlight lang="javascript">function setOptions(srcType) {
 
 
     var options = {
 
     var options = {
 
         // Some common settings are 20, 50, and 100
 
         // Some common settings are 20, 50, and 100
سطر 546: سطر 544:
 
     }
 
     }
 
     return options;
 
     return options;
}‎</syntaxhighlight>، والذي يأخذ الكائن CameraOptions كوسيط ثالث. عند استدعاء <code>getPicture</code>، قم بتمرير <code>setOptions</code> كمصدر للصورة.
+
}‎</syntaxhighlight>  
  
<code>Camera.PictureSourceType.CAMERA</code>
+
في العادة، ستحتاج إلى استخدام FILEURI بدلاً من DATAURL لتجنب معظم مشاكل الذاكرة. JPEG هو الترميز الموصى به في منصة أندرويد.  
  
بمجرد التقاط الصورة، يمكنك إما عرضها، أو فعل شيء آخر بها. في هذا المثال، سنستدعي الدالة <syntaxhighlight lang="javascript">function openCamera(selection) {
+
يمكنك التقاط صورة من خلال تمرير كائن الخيارات إلى <code>getPicture</code>، والذي يأخذ الكائن CameraOptions كوسيط ثالث. عند استدعاء <code>setOptions</code>، قم بتمرير <code>Camera.PictureSourceType.CAMERA</code> كمصدر للصورة.  
 +
<syntaxhighlight lang="javascript">function openCamera(selection) {
 
     var srcType = Camera.PictureSourceType.CAMERA;
 
     var srcType = Camera.PictureSourceType.CAMERA;
 
     var options = setOptions(srcType);
 
     var options = setOptions(srcType);
سطر 561: سطر 560:
 
         console.debug("Unable to obtain picture: " + error, "app");
 
         console.debug("Unable to obtain picture: " + error, "app");
 
     }, options);
 
     }, options);
}‎</syntaxhighlight> الخاصة بالتطبيق من الشيفرة السابقة.
+
}‎</syntaxhighlight>  
  
<code>displayImage</code>  
+
بمجرد التقاط الصورة، يمكنك إما عرضها، أو فعل شيء آخر بها. في هذا المثال، سنستدعي الدالة <code>displayImage</code> الخاصة بالتطبيق من الشيفرة السابقة.
 
+
<syntaxhighlight lang="javascript">function displayImage(imgUri) {
لعرض الصورة على بعض المنصات، قد تحتاج إلى تضمين الجزء الرئيسي من العنوان (URI) في العنصر Content-Security-Policy من الوسم <syntaxhighlight lang="javascript">function displayImage(imgUri) {
 
 
     var elem = document.getElementById('imageFile');
 
     var elem = document.getElementById('imageFile');
 
     elem.src = imgUri;
 
     elem.src = imgUri;
}‎</syntaxhighlight> في الملف index.html. على سبيل المثال، في منصة ويندوز 10، يمكنك تضمين <code><meta></code> في الوسم <code>ms-appdata:</code>. إليك المثال التالي:
+
}‎</syntaxhighlight>  
  
<code><meta></code>  
+
لعرض الصورة على بعض المنصات، قد تحتاج إلى تضمين الجزء الرئيسي من العنوان (URI) في العنصر Content-Security-Policy من الوسم <code><meta></code> في الملف index.html. على سبيل المثال، في منصة ويندوز 10، يمكنك تضمين <code>ms-appdata:</code> في الوسم <code><meta></code>. إليك المثال التالي:
 +
<syntaxhighlight lang="javascript"><meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: ms-appdata: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">‎</syntaxhighlight>  
  
 
== التقاط صورة وإعادة صورة مصغرة ==  
 
== التقاط صورة وإعادة صورة مصغرة ==  
  
للحصول على صور أصغر، يمكنك إعادة صورة مُعدّلة الحجم عن طريق تمرير القيمتين <syntaxhighlight lang="javascript"><meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: ms-appdata: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">‎</syntaxhighlight> و <code>targetHeight</code> مع الكائن CameraOptions الخاص بك. في هذا المثال، ستغيّر حجم الصورة المعادة لتلائم مربعًا بحجم 100 بكسل × 100 بكسل (يتم الاحتفاظ بنسبة العرض إلى الارتفاع [aspect ratio]، لذلك فالعدد 100 بكسل سيساوي إما الارتفاع أو العرض، مهما كان الأكبر في المصدر).  
+
للحصول على صور أصغر، يمكنك إعادة صورة مُعدّلة الحجم عن طريق تمرير القيمتين <code>targetHeight</code> و <code>targetWidth</code> مع الكائن CameraOptions الخاص بك. في هذا المثال، ستغيّر حجم الصورة المعادة لتلائم مربعًا بحجم 100 بكسل × 100 بكسل (يتم الاحتفاظ بنسبة العرض إلى الارتفاع [aspect ratio]، لذلك فالعدد 100 بكسل سيساوي إما الارتفاع أو العرض، مهما كان الأكبر في المصدر).  
 
+
<syntaxhighlight lang="javascript">function openCamera(selection) {
<code>targetWidth</code>
 
 
 
== اختيار ملف من مكتبة الصور ==
 
 
 
عند اختيار ملف باستخدام منتقي الملفات، فيجب عليك أيضًا تعيين الكائن CameraOptions. في هذا المثال، سنُعيّن <syntaxhighlight lang="javascript">function openCamera(selection) {
 
 
     var srcType = Camera.PictureSourceType.CAMERA;
 
     var srcType = Camera.PictureSourceType.CAMERA;
 
     var options = setOptions(srcType);
 
     var options = setOptions(srcType);
سطر 593: سطر 587:
 
         console.debug("Unable to obtain picture: " + error, "app");
 
         console.debug("Unable to obtain picture: " + error, "app");
 
     }, options);
 
     }, options);
}‎</syntaxhighlight> عند القيمة <code>sourceType</code>. لفتح منتقي الملفات، استدع <code>Camera.PictureSourceType.SAVEDPHOTOALBUM</code> تمامًا كما فعلت في المثال السابق، مع تمرير دوال الاستجابة (callbacks) للنجاح والخطأ إلى جانب الكائن CameraOptions.
+
}‎</syntaxhighlight>  
  
<code>getPicture</code>
+
== اختيار ملف من مكتبة الصور ==  
 
 
== اختيار صورة وإعادة صورة مصغرة ==  
 
  
تغيير حجم الملف المحدد بواسطة منتقي الملفات مشابه لتغيير الحجم باستخدام تطبيق الكاميرا. اضبط خيارات <syntaxhighlight lang="javascript">function openFilePicker(selection) {
+
عند اختيار ملف باستخدام منتقي الملفات، فيجب عليك أيضًا تعيين الكائن CameraOptions. في هذا المثال، سنُعيّن <code>sourceType</code> عند القيمة <code>Camera.PictureSourceType.SAVEDPHOTOALBUM</code>. لفتح منتقي الملفات، استدع <code>getPicture</code> تمامًا كما فعلت في المثال السابق، مع تمرير دوال الاستجابة (callbacks) للنجاح والخطأ إلى جانب الكائن CameraOptions.  
 +
<syntaxhighlight lang="javascript">function openFilePicker(selection) {
 
     var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM;
 
     var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM;
 
     var options = setOptions(srcType);
 
     var options = setOptions(srcType);
سطر 608: سطر 601:
 
         console.debug("Unable to obtain picture: " + error, "app");
 
         console.debug("Unable to obtain picture: " + error, "app");
 
     }, options);
 
     }, options);
}‎</syntaxhighlight> و <code>targetHeight</code>.
+
}‎</syntaxhighlight>  
  
<code>targetWidth</code>
+
== اختيار صورة وإعادة صورة مصغرة ==
  
== التقاط صورة والحصول على كائن FileEntry ==
+
تغيير حجم الملف المحدد بواسطة منتقي الملفات مشابه لتغيير الحجم باستخدام تطبيق الكاميرا. اضبط خيارات <code>targetHeight</code> و <code>targetWidth</code>.  
 
+
<syntaxhighlight lang="javascript">function openFilePicker(selection) {
إن كنت تريد القيام بشيء ما مثل نسخ صورة إلى موضع آخر، أو تحميلها إلى مكان ما باستخدام الإضافة FileTransfer، فستحتاج إلى الحصول على كائن FileEntry لأجل الصورة المعادة. للقيام بذلك، استدع التابع <syntaxhighlight lang="javascript">function openFilePicker(selection) {
 
 
     var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM;
 
     var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM;
 
     var options = setOptions(srcType);
 
     var options = setOptions(srcType);
سطر 629: سطر 621:
 
         console.debug("Unable to obtain picture: " + error, "app");
 
         console.debug("Unable to obtain picture: " + error, "app");
 
     }, options);
 
     }, options);
}‎</syntaxhighlight> على عنوان (URI) الملف المُعاد من قبل تطبيق الكاميرا. إن كنت بحاجة إلى استخدام كائن FileEntry، اضبط <code>window.resolveLocalFileSystemURL</code> عند القيمة <code>destinationType</code> في كائن CameraOptions (هذه هي أيضًا القيمة الافتراضية).
+
}‎</syntaxhighlight>  
  
ملاحظة تحتاج إلى <code>Camera.DestinationType.FILE_URI</code> لاستدعاء [https://www.npmjs.com/package/cordova-plugin-file File plugin].
+
== التقاط صورة والحصول على كائن FileEntry ==
  
هنا استدعاء <code>window.resolveLocalFileSystemURL</code>. يُمرّر عنوان الصورة إلى هذه الدالة من دالة النجاح الخاصة بـ <code>window.resolveLocalFileSystemURL</code>. تتلقى دالة الاستجابة للنجاح (success handler) الخاصة بـ <code>getPicture</code> الكائن FileEntry.  
+
إن كنت تريد القيام بشيء ما مثل نسخ صورة إلى موضع آخر، أو تحميلها إلى مكان ما باستخدام الإضافة FileTransfer، فستحتاج إلى الحصول على كائن FileEntry لأجل الصورة المعادة. للقيام بذلك، استدع التابع <code>window.resolveLocalFileSystemURL</code> على عنوان (URI) الملف المُعاد من قبل تطبيق الكاميرا. إن كنت بحاجة إلى استخدام كائن FileEntry، اضبط <code>destinationType</code> عند القيمة <code>Camera.DestinationType.FILE_URI</code> في كائن CameraOptions (هذه هي أيضًا القيمة الافتراضية).  
<code>resolveLocalFileSystemURL</code>  
+
ملاحظة تحتاج إلى [https://www.npmjs.com/package/cordova-plugin-file File plugin] لاستدعاء <code>window.resolveLocalFileSystemURL</code>.
  
في المثال الموضح في الشيفرة البرمجية السابقة، يمكنك استدعاء دالة التطبيق <syntaxhighlight lang="javascript">function getFileEntry(imgUri) {
+
هنا استدعاء <code>window.resolveLocalFileSystemURL</code>. يُمرّر عنوان الصورة إلى هذه الدالة من دالة النجاح الخاصة بـ <code>getPicture</code>. تتلقى دالة الاستجابة للنجاح (success handler) الخاصة بـ <code>resolveLocalFileSystemURL</code> الكائن FileEntry.
 +
<syntaxhighlight lang="javascript">function getFileEntry(imgUri) {
 
     window.resolveLocalFileSystemURL(imgUri, function success(fileEntry) {
 
     window.resolveLocalFileSystemURL(imgUri, function success(fileEntry) {
 
         // Do something with the FileEntry object, like write to it, upload it, etc.
 
         // Do something with the FileEntry object, like write to it, upload it, etc.
سطر 647: سطر 640:
 
         createNewFileEntry(imgUri);
 
         createNewFileEntry(imgUri);
 
     });
 
     });
}‎</syntaxhighlight> إن لم تحصل على كائن FileEntry صالح. الصورة المعادة من قبل تطبيق الكاميرا يجب أن تُنتج كائن FileEntry صالح، ولكن قد يختلف سلوك المنصات على بعض المحاكيات للملفات المُعادة من منتقي الملفات.
+
}‎</syntaxhighlight>  
  
يمكنك الاطلاع على مثال عن الكتابة في FileEntry من هنا <code>createNewFileEntry</code>.  
+
في المثال الموضح في الشيفرة البرمجية السابقة، يمكنك استدعاء دالة التطبيق <code>createNewFileEntry</code> إن لم تحصل على كائن FileEntry صالح. الصورة المعادة من قبل تطبيق الكاميرا يجب أن تُنتج كائن FileEntry صالح، ولكن قد يختلف سلوك المنصات على بعض المحاكيات للملفات المُعادة من منتقي الملفات.
 +
يمكنك الاطلاع على مثال عن الكتابة في FileEntry من هنا [https://www.npmjs.com/package/cordova-plugin-file File plugin README].  
  
تنشئ الشيفرة المعروضة هنا ملفًا في ذاكرة التخزين المؤقت لتطبيقك (في التخزين المحمي sandboxed) باسم [https://www.npmjs.com/package/cordova-plugin-file File plugin README]. باستخدام كائن FileEntry الجديد، يمكنك نسخ الصورة إلى الملف، أو القيام بشيء آخر مثل تحميلها.  
+
تنشئ الشيفرة المعروضة هنا ملفًا في ذاكرة التخزين المؤقت لتطبيقك (في التخزين المحمي sandboxed) باسم <code>tempFile.jpeg</code>. باستخدام كائن FileEntry الجديد، يمكنك نسخ الصورة إلى الملف، أو القيام بشيء آخر مثل تحميلها.  
<code>tempFile.jpeg</code>
+
<syntaxhighlight lang="javascript">function createNewFileEntry(imgUri) {
 +
    window.resolveLocalFileSystemURL(cordova.file.cacheDirectory, function success(dirEntry) {
 +
        // JPEG file
 +
        dirEntry.getFile("tempFile.jpeg", { create: true, exclusive: false }, function (fileEntry) {
 +
            // Do something with it, like write to it, upload it, etc.
 +
            // writeFile(fileEntry, imgUri);
 +
            console.log("got file: " + fileEntry.fullPath);
 +
            // displayFileData(fileEntry.fullPath, "File copied to");
 +
        }, onErrorCreateFile);
 +
    }, onErrorResolveUrl);
 +
}‎</syntaxhighlight>
 
==مصادر==
 
==مصادر==
 
*[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-camera/index.html صفحة cordova-plugin-camera في توثيق كوردوفا الرسمي.]
 
*[https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-camera/index.html صفحة cordova-plugin-camera في توثيق كوردوفا الرسمي.]

مراجعة 19:04، 13 ديسمبر 2018

تُعرّف الإضافة cordova-plugin-camera كائنًا عامًّا navigator.camera، والذي يوفر واجهة برمجية لالتقاط الصور، واختيار الصور من مكتبة الصور داخل النظام.

على الرغم من أن الكائن navigator.camera مربوط بالنطاق العام (global scope) للكائن navigator، إلا أنه غير متوفر إلا بعد إطلاق الحدث deviceready.

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    console.log(navigator.camera);
}

التثبيت

يتطلب تثبيت هذه الإضافة الإصدار كوردوفا 5.0 أو ما بعده:

cordova plugin add cordova-plugin-camera‎

لا يزال بالإمكان تثبيت هذه الإضافة على الإصدارات القديمة من كوردوفا عبر المُعرِّف المُتجاوز:

cordova plugin add org.apache.cordova.camera‎

من الممكن أيضًا تثبيت هذه الإضافة عبر عنوان مستودع git مباشرة (إلا أنه غير مستقر)

cordova plugin add https://github.com/apache/cordova-plugin-camera.git‎

هذا التوثيق مولد آليًا

تنبيه: قم بتنفيذ الأمر npm install في مستودع الإضافة لتمكين التوليد التلقائي للتوثيق إن كنت تخطط لإرسال وثائق العلاقات العامة (PR).

تُستخدم الأداة jsdoc-to-markdown لتوليد المستندات.

بتـالف التوثيق من قالب، وملفات الواجهة البرمجية المُستخلصة من شيفرة جافاسكريبت الخاصة بالإضافة، يجب إعادة إنشاء التوثيق قبل كل عملية التزام - commit - (يتم إجراؤها تلقائيًا عبر الأداة husky، عبر تنفيذ الأمر npm run gen-docs مع الخطاف precommit - راجع الملف package.json لمزيد من التفاصيل).

ملاحظات خاصة بمنصة iOS

منذ الإصدار iOS 10، صار من الإلزامي تقديم وصف للاستخدام (usage description) في الملف info.plist إن كنت تريد الوصول إلى بيانات حساسة. عندما يستأذن النظام المستخدم للوصول إلى تلك المعلومات، سيُعرض وصف الاستخدام ذاك كجزء من مربع الاستئذان (permission dialog box)، ولكن إذا لم تُوفِّر وصف الاستخدام، فسيتعطل التطبيق قبل عرض مربع الحوار. وأيضًا، سترفض Apple التطبيقات التي تصل إلى البيانات الخاصة دون أن تقدم وصفًا للاستخدام.

تتطلب هذه الإضافات أوصاف الاستخدام التالية:

  • NSCameraUsageDescription: يحدد سبب وصول تطبيقك إلى كاميرا الجهاز.
  • NSPhotoLibraryUsageDescription: يحدد سبب وصول تطبيقك إلى مكتبة صور المستخدم.
  • NSLocationWhenInUseUsageDescription: يحدد سبب وصول تطبيقك إلى المعلومات الجغرافية التي تحدد موقع المستخدم أثناء استخدام التطبيق. (عيِّن هذا الوصف إن تم تعيين الخيارCameraUsesGeolocation عند القيمة true).
  • NSPhotoLibraryAddUsageDescription: يحدد سبب طلب تطبيقك حق الوصول بالكتابة فقط (write-only access) إلى مكتبة صور المستخدم.

لإضافة هذه المُدخلات إلى الملف info.plist، يمكنك استخدام الوسم edit-config في الملف config.xml على النحو التالي:

<edit-config target="NSCameraUsageDescription" file="*-Info.plist" mode="merge">
    <string>need camera access to take pictures</string>
</edit-config>
<edit-config target="NSPhotoLibraryUsageDescription" file="*-Info.plist" mode="merge">
    <string>need photo library access to get pictures from there</string>
</edit-config>
<edit-config target="NSLocationWhenInUseUsageDescription" file="*-Info.plist" mode="merge">
    <string>need location access to find things nearby</string>
</edit-config>
<edit-config target="NSPhotoLibraryAddUsageDescription" file="*-Info.plist" mode="merge">
    <string>need photo library access to save pictures there</string>
</edit-config>

الواجهة البرمجية (API)

camera

camera.getPicture (successCallback، errorCallback، options)‎

يُمكّن التابع getPicture من التقاط صورة باستخدام الكاميرا، أو الحصول على صورة من معرض الصور في الجهاز.

تُمرّر الصورة إلى دالة النجاح (success callback) كملف مُرمّز بالترميز Base64، أو على هيئة عنوانٍ (URI) يشير إلى ملف الصورة.

تفتح الدالة camera.getPicture تطبيق الكاميرا الافتراضي للجهاز، والذي يسمح للمستخدمين بالاقتطاف من الصور افتراضيًا - يحدث هذا السلوك، عندما يتساوى Camera.sourceType و [#module_Camera.PictureSourceType Camera.PictureSourceType.CAMERA]. بمجرد أن يلتقط المستخدم الصورة، يُغلق تطبيق الكاميرا ويُسترجع (restored) التطبيق.

إن كانت الخاصية Camera.sourceType تساوي Camera.PictureSourceType.PHOTOLIBRARY أو Camera.PictureSourceType.SAVEDPHOTOALBUM، فسيظهر مربع حوار يمكّن للمستخدمين من اختيار إحدى الصور الموجودة.

تُرسل القيمة المعادة إلى دالة الاستجابة [#module_camera.onSuccess cameraSuccess]، وفق إحدى التنسيقات التالية، اعتمادًا على الخيار cameraOptions المحدد:

  • سلسلة نصية String تحتوي على الترميز-Base64 الخاص بالصورة.
  • سلسلة نصية String تمثل موضع ملف الصورة في الذاكرة المحلية (السلوك الافتراضي).

يمكنك أن تفعل ما تريد بالصورة المرمّزة أو عنواها، على سبيل المثال:

  • عرض (Render) الصورة في الوسم <img>، كما هو موضح في المثال أدناه
  • حفظ البيانات محليا (LocalStorage، Lawnchair، الخ)
  • نشر البيانات إلى خادم بعيد

NOTE: دقة الصور على الأجهزة الحديثة جيدة للغاية. لا تُصغّر جودة الصور المختارة من معرض الجهاز، حتى عند تحديد المعامل quality. لتجنب مشاكل الذاكرة الشائعة، اضبط قيمة Camera.destinationType عند FILE_URI بدلاً من DATA_URL.

Supported Platforms

  • أندرويد
  • بلاك بيري
  • Browser
  • فايرفوكس
  • FireOS
  • iOS
  • ويندوز
  • WP8
  • أوبونتو

يمكن الحصول على المزيد من الأمثلة من [#camera-getPicture-examples here]. كما يمكنك الاطلاع على بعض الملاحظات المخصوصة بمنصات محددة من [#camera-getPicture-quirks here].

Kind: تابع ثابت (static method) للكائن camera المعامل النوع الشرح successCallback onSuccess errorCallback onError options CameraOptions CameraOptions

Example

navigator.camera.getPicture(cameraSuccess, cameraError, cameraOptions);


camera.cleanup()‎

يزيل هذا التابع ملفات الصور الوسطية التي تُحفظ في المخزن المؤقت بعد استدعاء [#module_camera.getPicture camera.getPicture]. ويطبق فقط عندما تساوي Camera.sourceType القيمة Camera.PictureSourceType.CAMERA وتساوي Camera.destinationType القيمة Camera.DestinationType.FILE_URI.

Supported Platforms

  • iOS

Kind: تابع ثابت للكائن camera Example

navigator.camera.cleanup(onSuccess, onFail);
function onSuccess() {
    console.log("Camera cleanup success.")
}
function onFail(message) {
    alert('Failed because: ' + message);
}

camera.onError : function

دالة استجابة (Callback function) تُستخدم لتوفير رسالة خطأ.

Kind:وسم typedef ثابت من الكائن camera المعاملات النوع الشرح message string يتم توفير الرسالة عبر الشيفرة الأصلية للجهاز.


camera.onSuccess: function

دالة استجابة تُوفّر بيانات الصورة.

Kind: وسم typedef ثابت من الكائن camera المعاملات النوع الشرح imageData string ترميز لبيانات الصورة وفق الترميز Base64، أو عنوان (URI) لملف الصورة، اعتمادًا على الخيار [#module_camera.CameraOptions cameraOptions] الساري.

Example

// Show image
//
function cameraCallback(imageData) {
   var image = document.getElementById('myImage');
   image.src = "data:image/jpeg;base64," + imageData;
}


camera.CameraOptions : Object

معاملات اختيارية لتخصيص إعدادات الكاميرا.

  • [#CameraOptions-quirks Quirks]

Kind:وسم typedef ثابت من الكائن camera Properties الاسم النوع القيمة الافتراضية الشرح quality number 50 جودة الصورة المحفوظة، مُعبّر عنها بعدد من المجال 0-100، حيث يمثل العدد 100 الدقة الكاملة، عادة بدون أي خسارة من ضغط الملفات. (لاحظ أن المعلومات حول دقة الكاميرا غير متوفرة.) destinationType DestinationType FILE_URI اختر تنسيق القيمة المعادة. sourceType PictureSourceType CAMERA تحديد مصدر الصورة. allowEdit Boolean false السماح بتعديل بسيط على الصورة قبل الاختيار. encodingType EncodingType JPEG اختيار ترميز ملف الصورة المعادة. targetWidth number

العرض بالبكسل لتكبير الصورة. يجب استخدامه مع targetHeight. نسبة أبعاد الصورة (Aspect ratio) تبقى ثابتة. targetHeight number

الارتفاع بالبكسل لتكبير الصورة. يجب استخدامه مع targetWidth. نسبة أبعاد الصور تبقى ثابتة. mediaType MediaType PICTURE تعيين نوع الوسائط (medias) المراد الاختيار من بينها. يعمل هذا المعامل فقط عندما يساوي PictureSourceType القيمة PHOTOLIBRARY أو SAVEDPHOTOALBUM. correctOrientation Boolean

تدوير الصورة لتصحيح اتجاه الجهاز أثناء التقاط الصورة. saveToPhotoAlbum Boolean

حفظ الصورة في ألبوم الصور على الجهاز بعد التقاطها. popoverOptions CameraPopoverOptions

خيارات مخصوصة بمنصة iOS فقط، والتي تحدد موضع popover في iPad. cameraDirection Direction BACK اختيار الكاميرا المراد استخدامها (االأمامية أو الخلفية).



camera

Camera.DestinationType : enum

يُعرّف تنسيق مُخرجات استدعاء Camera.getPicture. ملاحظة: على منصة iOS، تمرير DestinationType.NATIVE_URI مع PictureSourceType.PHOTOLIBRARY أو PictureSourceType.SAVEDPHOTOALBUM سيُعطل أي تعديلات على الصورة (تغيير الحجم، تغيير الجودة، الاقتصاص، إلخ) بسبب خصوصيات التقديم (implementation specific).

Kind: خاصية تعداد (enum) ثابتة للكائن Camera Properties الاسم النوع القيمة الافتراضية الشرح DATA_URL number 0 تُعاد سلسلة نصية وفق الترميز base64. تركز DATAURL كثيرًا على الذاكرة، وقد تتسبب في تعطل التطبيق أو نفاذ الذاكرة. استخدم FILEURI أو NATIVE_URI إن أمكن FILE_URI number 1 إعادة عنوان (uri ) الملف (content://media/external/images/media/2 لمنصة أندرويد) NATIVE_URI number 2 إعادة العنوان (uri) الأصلي (على سبيل المثال، asset-library://... لمنصة iOS)


Camera.EncodingType : enum

Kind: خاصية تعداد (enum) ثابتة للكائن Camera Properties الاسم النوع القيمة الافتراضية الشرح JPEG number 0 تعيد هذه الخاصية صورة مشفرة وفق الترميز JPEG PNG number 1 تعيد صورة مشفرة وفق الترميز PNG


Camera.MediaType : enum

Kind: خاصية تعداد (enum) الثابت للكائن Camera Properties الاسم النوع القيمة الافتراضية الشرح PICTURE number 0 تمكن هذه الخاصية من اختيار الصور الثابتة وحسب. القيمة الافتراضية ستعيد التنسيق المحدد عبر DestinationType VIDEO number 1 تسمح باختيار الفيديو فقط، وتعيد العنوان (URL) وحسب. ALLMEDIA number 2 تسمح بالاختيار من جميع أنواع الوسائط


Camera.PictureSourceType : enum

يعرف تنسيق مُخرجات استدعاء Camera.getPicture. ملاحظة: على منصة iOS، الذي تمرير PictureSourceType.PHOTOLIBRARY أو PictureSourceType.SAVEDPHOTOALBUM إلى جانب DestinationType.NATIVE_URI سيعطل أي تعديلات على الصورة (تغيير الحجم أو تغيير الجودة أو الافتصاص إلخ) بسبب اختلاف طرق التقديم (implementation).

Kind: خاصية تعداد (enum) ثابتة للكائن Camera Properties الاسم النوع القيمة الافتراضية الشرح PHOTOLIBRARY number 0 اختيار صورة من مكتبة الصور في بالجهاز (تشبه SAVEDPHOTOALBUM في أندرويد) CAMERA number 1 التقاط صورة عبر الكاميرا SAVEDPHOTOALBUM number 2 اختيار صورة من ألبوم Camera Roll الموجود في الجهاز (مثل PHOTOLIBRARY في منصة أندرويد)


Camera.PopoverArrowDirection : enum

تطابق الثوابت UIPopoverArrowDirection الخاصة بمنصة iOS لتحديد موضع السهم (arrow location) على العنصر المنبثق popover.

Kind: خاصية تعداد (enum) ثابتة للكائن Camera Properties الاسم النوع القيمة الافتراضية ARROW_UP number 1 ARROW_DOWN number 2 ARROW_LEFT number 4 ARROW_RIGHT number 8 ARROW_ANY number 15


Camera.Direction : enum

Kind: خاصية تعداد (enum) ثابتة للكائن Camera Properties الاسم النوع القيمة الافتراضية الشرح BACK number 0 استخدام الكاميرا الخلفية FRONT number 1 استخدام الكاميرا الأمامية



CameraPopoverOptions

هذه معاملات مخصوصة بمنصة iOS فقط، حيث تحدد موضع عنصر الإرساء (anchor element) واتجاه السهم في العنصر المُنبثق عند اختيار الصور من مكتبة أو ألبوم iPad. لاحظ أنه قد يتغير حجم العنصر المنبثق للتكيف مع اتجاه السهم والشاشة. تأكد من أخذ تغييرات الاتجاه بعين الاعتبار عند تحديد موضع عنصر الإرساء. المعامل النوع القيمة الافتراضية الشرح [x] Number 0 عدد يمث إحداثية الأفاصيل (x) بالبكسل من عنصر الشاشة الذي يُرسى عليه العنصر المنبثق. [y] Number 32 عدد يمث إحداثية الأراتيب (y) بالبكسل من عنصر الشاشة الذي يُرسى عليه العنصر المنبثق. [width] Number 320 العرض، بالبكسل، لعنصر الشاشة الذي يُرسى عليه العنصر المنبثق. [height] Number 480 الارتفاع بالبكسل، لعنصر الشاشة الذي يُرسى عليه العنصر المنبثق. [arrowDir] PopoverArrowDirection ARROW_ANY الاتجاه الذي يجب أن يشير إليه السهم العنصر المنبثق.



CameraPopoverHandle

مقبض (handle) لعارض صور منبثق (image picker popover).

Supported Platforms

  • iOS

Example

navigator.camera.getPicture(onSuccess, onFail,
{
    destinationType: Camera.DestinationType.FILE_URI,
    sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
    popoverOptions: new CameraPopoverOptions(300, 300, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY)
});
// Reposition the popover if the orientation changes.
window.onorientationchange = function() {
    var cameraPopoverHandle = new CameraPopoverHandle();
    var cameraPopoverOptions = new CameraPopoverOptions(0, 0, 100, 100, Camera.PopoverArrowDirection.ARROW_ANY);
    cameraPopoverHandle.setPosition(cameraPopoverOptions);
}


camera.getPicture Errata

مثال

المثال التالي سيلتقط صورة ويستعيد موضع ملف الصورة:

navigator.camera.getPicture(onSuccess, onFail, { quality: 50,
    destinationType: Camera.DestinationType.FILE_URI });
function onSuccess(imageURI) {
    var image = document.getElementById('myImage');
    image.src = imageURI;
}
function onFail(message) {
    alert('Failed because: ' + message);
}

التقاط صورة واستردادها وفق الترميز Base64:

/**
 * Warning: Using DATA_URL is not recommended! The DATA_URL destination
 * type is very memory intensive, even with a low quality setting. Using it
 * can result in out of memory errors and application crashes. Use FILE_URI
 * or NATIVE_URI instead.
 */
navigator.camera.getPicture(onSuccess, onFail, { quality: 25,
    destinationType: Camera.DestinationType.DATA_URL
});
function onSuccess(imageData) {
    var image = document.getElementById('myImage');
    image.src = "data:image/jpeg;base64," + imageData;
}
function onFail(message) {
    alert('Failed because: ' + message);
}

التفضيلات (iOS)

  • CameraUsesGeolocation (قيمة منطقية، القيمة الافتراضية تساوي false). لالتقاط صور JPEG، اضبط هذا الخيار عند القيمة true للحصول على بيانات الموقع الجغرافي في رأس الملف EXIF. سيؤدي هذا إلى إرسال طلبية للحصول على أذونات تحديد الموقع الجغرافي إذا تم تعيينها عند القيمة true.
<preference name="CameraUsesGeolocation" value="false" />

ملاحظات خاصة بمنصة Amazon Fire

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

ملاحظات خاصة بمنصة أندرويد

يستخدم أندرويد المقاصد (intents) لإطلاق نشاط الكاميرا على الجهاز لالتقاط الصور، وعلى الهواتف ذات الذاكرة المنخفضة، قد يفشل النشاط. في هذه الحالة، سيتم تسليم النتيجة المعادة من استدعاء الإضافة عبر الحدث resume. راجع صفحة the Android Lifecycle guide لمزيد من المعلومات. ستحتوي pendingResult.result على القيمة التي ستُمرّر إلى الاستجابات - callbacks - (إما عنوان URL أو رسالة خطأ). تحقق من pendingResult.pluginStatus لتحديد ما إذا كان الاستدعاء ناجحًا أم لا.

ملاحظات خاصة بالمتصفحات (Browsers)

يمكن أن تعيد الصورالمشفرة وفق الترميز Base64 فقط.

ملاحظات خاصة بمنصة Firefox

يتم حاليًا تقديم الإضافة Camera باستخدام Web Activities.

ملاحظات خاصة بمنصة iOS

يمكن أن يتسبب تضمين دالة [[JavaScript|جافااسكريبت]] alert() في أي من دوال الاستجابة إلى حدوث مشاكل. غلّف التنبيه داخل الدالة setTimeout() للسماح لمنتقي الصور الخاص أو العنصر المنبثق popover بمنصة iOS لأجل الإغلاق الكامل قبل عرض التنبيه:

setTimeout(function() {
    // do your thing here!
}, 0);

ملاحظات خاصة بمنصة Windows Phone 7

استدعاء تطبيق الكاميرا الأصلي أثناء وصل الجهاز عبر Zune لن ينجح، وسيطلق دالة خطأ (error callback).

ملاحظات خاصة بمنصة ويندوز

على منصة Windows Phone 8.1، استخدام SAVEDPHOTOALBUM أو PHOTOLIBRARY كنوع مصدري (source type) سيؤدي إلى تجميد التطبيق إلى حين إعادة منتقي الملفات (file picker) للصورة المختارة، ثم يستأنف بصفحة البداية كما هو موضح في ملف التطبيق config.xml. في حالة استدعاء camera.getPicture من صفحة أخرى، سيؤدي ذلك إلى إعادة تحميل صفحة البداية ثانية، ولن تُستدعى دالتا النجاح والخطأ.

لتجنب هذا نقترح استخدام نمط التطبيقات أحادية الصفحة (SPA)، أو استدعاء camera.getPicture فقط لأجل صفحة بدء التطبيق.

المزيد من المعلومات حول الواجهات البرمجية لمنتقي Windows Phone 8.1 راجع هذه الصفحة: How to continue your Windows Phone app after calling a file picker

ملاحظات خاصة بمنصة Tizen

لا تدعم Tizen إلا destinationType الخاصة بـ Camera.DestinationType.FILE_URI أو sourceType الخاصة بـ Camera.PictureSourceType.PHOTOLIBRARY.


CameraOptions Errata

ملاحظات خاصة بمنصة Amazon Fire

  • ستُنتج القيمةُ cameraDirection صورًا خلفية (back-facing photos).
  • تتجاهل هذه المنصة المعامل allowEdit.
  • يعرض كل من Camera.PictureSourceType.PHOTOLIBRARY و Camera.PictureSourceType.SAVEDPHOTOALBUM نفس ألبوم الصور.

ملاحظات خاصة بمنصة أندرويد

  • ستُنتجُ القيمةُ cameraDirection صورًا خلفية (back-facing photo).
  • allowEdit is unpredictable on Android and it should not be used! في أندرويد تحاول هذه الإضافة العثور على تطبيق واستخدامه على جهاز المستخدم لأجل الاقتصاص (cropping) من الصورة. لا تتحكم الإضافة في التطبيق الذي يحدده المستخدم لإجراء عملية اقتصاص الصور، ومن المحتمل جدًا أن يختار المستخدم خيارًا غير متوافقٍ، ويتسبب في فشل الإضافة. يعمل هذا الأمر في بعض الأحيان لأن معظم الأجهزة مُزوّدة بتطبيقٍ يعالج الاقتصاص بطريقة متوافقة مع هذه الإضافة (صور Google Plus)، ولكن لا يمكن الاعتماد على هذا دائمًا. إن كان تعديل الصور أمرًا ضروريًا لتطبيقك، فكّر في البحث عن مكتبة أو إضافة خارجية توفر أداة أكثر كفاءة في تعديل للصور.
  • يعرض كل من Camera.PictureSourceType.PHOTOLIBRARY و Camera.PictureSourceType.SAVEDPHOTOALBUM نفس ألبوم الصور.
  • تتجاهل منصة المعامل encodingType إن لم تكن الصورة معدلة (أي إن كانت quality تساوي 100، وكانت correctOrientation تساوي false، ولم يُحدد لا targetHeight أو targetWidth). سيُعيد مصدر CAMERA دائمًا ملف JPEG المعطى من قبل الكاميرا الأصليةـ وسيُعيد مصدرا PHOTOLIBRARY و SAVEDPHOTOALBUM الملف المحدد وفق ترميزه الحالي.

ملاحظات خاصة بمنصة BlackBerry 10

  • تتجاهل هذه المنصة المعامل quality.
  • تتجاهل المعامل allowEdit.
  • Camera.MediaType غير مدعوم.
  • تتجاهل المعامل correctOrientation.
  • تتجاهل المعامل cameraDirection.

ملاحظات خاصة بمنصة Firefox

  • تتجاهل هذه المنصة المعامل quality.
  • يتم تجاهل Camera.DestinationType وتساوي 1 (عنوان [URI] ملف الصورة)
  • تتجاهل المعامل allowEdit.
  • تتجاهل المعامل PictureSourceType (يختاره المستخدم من نافذة الحوار)
  • تتجاهل encodingType
  • تتجاهل targetWidth و targetHeight
  • Camera.MediaType غير مدعوم.
  • تتجاهل المعامل correctOrientation.
  • تتجاهل المعامل cameraDirection.

ملاحظات خاصة بمنصة iOS

  • عند استخدام destinationType.FILE_URI، تُحفظ الصور في المجلد المؤقت للتطبيق. تُحذف محتويات مجلد التطبيق المؤقت عند انتهاء التطبيق.
  • عند استخدام destinationType.NATIVE_URI و sourceType.CAMERA، تُحفظ الصور في ألبوم الصور المحفوظة، بغض النظر عن قيمة المعامل saveToPhotoAlbum.
  • عند استخدام destinationType.NATIVE_URI و sourceType.PHOTOLIBRARY أو sourceType.SAVEDPHOTOALBUM، يتم تجاهل جميع خيارات التعديل، ويعاد رابط إلى الصورة الأصلية.

ملاحظات خاصة بمنصة Tizen

  • الخيارات (options) غير مدعومة
  • يُعاد دائمًا عنوان ملف (FILE URI)

ملاحظات خاصة بمنصتي Windows Phone الإصدارين 7 و 8

  • تتجاهل هاتان المنصتان المعامل allowEdit.
  • تتجاهل المنصتان المعامل correctOrientation.
  • تتجاهل المنصتان المعامل cameraDirection.
  • تتجاهل المنصتان المعامل saveToPhotoAlbum. ملاحظة هامة: دائمًا تُنسخ الصور التي تم التقاطها باستخدام الواجهة البرمجية للإضافة Cordova camera على ويندوز 8 (WP8/8) الواجهة في ذاكرة (roll) الكاميرا الخاصة بالهاتف. استنادًا إلى إعدادات المستخدم، قد يعني هذا أيضًا أن الصورة ستُحمّل تلقائيًا إلى الخدمة OneDrive. يمكن أن يعني هذا أن الصورة ستكون متاحة لجمهور أكبر من الجمهور الذي يستهدفه تطبيقك. إن كانت هذه مشكلة لتطبيقك، فستحتاج إلى تقديم CameraCaptureTask كما هو مبيّن في توثيق documented on MSDN. يمكنك أن تقوم أيضًا بالتعليق أو التصويت لصالح حل المشكلة في issue tracker.
  • تتجاهل المنصتان خاصية mediaType في cameraOptions، لأن بيئة العمل SDK في منصة Windows Phone لا توفر طريقة لاختيار مقاطع الفيديو من PHOTOLIBRARY.

عينة: التقاط الصور، اختيار الصور من مكتبة الصور، والحصول على الصور المصغرة

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

  • فتح الكاميرا والتقاط صورة [#takePicture take a Picture]
  • التقاط صورة وإعادة صورة مصغرة [#getThumbnails return thumbnails] (صورة مُعدلة الحجم)
  • التقاط صورة و [#convert generate a FileEntry object]
  • [#selectFile Select a file] اختيار صورة من مكتبة الصور
  • اختيار صورة بتنسيق JPEG وإعادة صورة مصغرة [#getFileThumbnails return thumbnails] (صورة مُعدلة الحجم)
  • اختيار صورة و [#convert generate a FileEntry object]

التقاط صورة

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

function setOptions(srcType) {
    var options = {
        // Some common settings are 20, 50, and 100
        quality: 50,
        destinationType: Camera.DestinationType.FILE_URI,
        // In this app, dynamically set the picture source, Camera or photo gallery
        sourceType: srcType,
        encodingType: Camera.EncodingType.JPEG,
        mediaType: Camera.MediaType.PICTURE,
        allowEdit: true,
        correctOrientation: true  //Corrects Android orientation quirks
    }
    return options;
}

في العادة، ستحتاج إلى استخدام FILEURI بدلاً من DATAURL لتجنب معظم مشاكل الذاكرة. JPEG هو الترميز الموصى به في منصة أندرويد.

يمكنك التقاط صورة من خلال تمرير كائن الخيارات إلى getPicture، والذي يأخذ الكائن CameraOptions كوسيط ثالث. عند استدعاء setOptions، قم بتمرير Camera.PictureSourceType.CAMERA كمصدر للصورة.

function openCamera(selection) {
    var srcType = Camera.PictureSourceType.CAMERA;
    var options = setOptions(srcType);
    var func = createNewFileEntry;
    navigator.camera.getPicture(function cameraSuccess(imageUri) {
        displayImage(imageUri);
        // You may choose to copy the picture, save it somewhere, or upload.
        func(imageUri);
    }, function cameraError(error) {
        console.debug("Unable to obtain picture: " + error, "app");
    }, options);
}

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

function displayImage(imgUri) {
    var elem = document.getElementById('imageFile');
    elem.src = imgUri;
}

لعرض الصورة على بعض المنصات، قد تحتاج إلى تضمين الجزء الرئيسي من العنوان (URI) في العنصر Content-Security-Policy من الوسم <meta> في الملف index.html. على سبيل المثال، في منصة ويندوز 10، يمكنك تضمين ms-appdata: في الوسم <meta>. إليك المثال التالي:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: ms-appdata: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

التقاط صورة وإعادة صورة مصغرة

للحصول على صور أصغر، يمكنك إعادة صورة مُعدّلة الحجم عن طريق تمرير القيمتين targetHeight و targetWidth مع الكائن CameraOptions الخاص بك. في هذا المثال، ستغيّر حجم الصورة المعادة لتلائم مربعًا بحجم 100 بكسل × 100 بكسل (يتم الاحتفاظ بنسبة العرض إلى الارتفاع [aspect ratio]، لذلك فالعدد 100 بكسل سيساوي إما الارتفاع أو العرض، مهما كان الأكبر في المصدر).

function openCamera(selection) {
    var srcType = Camera.PictureSourceType.CAMERA;
    var options = setOptions(srcType);
    var func = createNewFileEntry;
    if (selection == "camera-thmb") {
        options.targetHeight = 100;
        options.targetWidth = 100;
    }
    navigator.camera.getPicture(function cameraSuccess(imageUri) {
        // Do something
    }, function cameraError(error) {
        console.debug("Unable to obtain picture: " + error, "app");
    }, options);
}

اختيار ملف من مكتبة الصور

عند اختيار ملف باستخدام منتقي الملفات، فيجب عليك أيضًا تعيين الكائن CameraOptions. في هذا المثال، سنُعيّن sourceType عند القيمة Camera.PictureSourceType.SAVEDPHOTOALBUM. لفتح منتقي الملفات، استدع getPicture تمامًا كما فعلت في المثال السابق، مع تمرير دوال الاستجابة (callbacks) للنجاح والخطأ إلى جانب الكائن CameraOptions.

function openFilePicker(selection) {
    var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM;
    var options = setOptions(srcType);
    var func = createNewFileEntry;
    navigator.camera.getPicture(function cameraSuccess(imageUri) {
        // Do something
    }, function cameraError(error) {
        console.debug("Unable to obtain picture: " + error, "app");
    }, options);
}

اختيار صورة وإعادة صورة مصغرة

تغيير حجم الملف المحدد بواسطة منتقي الملفات مشابه لتغيير الحجم باستخدام تطبيق الكاميرا. اضبط خيارات targetHeight و targetWidth.

function openFilePicker(selection) {
    var srcType = Camera.PictureSourceType.SAVEDPHOTOALBUM;
    var options = setOptions(srcType);
    var func = createNewFileEntry;
    if (selection == "picker-thmb") {
        // To downscale a selected image,
        // Camera.EncodingType (e.g., JPEG) must match the selected image type.
        options.targetHeight = 100;
        options.targetWidth = 100;
    }
    navigator.camera.getPicture(function cameraSuccess(imageUri) {
        // Do something with image
    }, function cameraError(error) {
        console.debug("Unable to obtain picture: " + error, "app");
    }, options);
}

التقاط صورة والحصول على كائن FileEntry

إن كنت تريد القيام بشيء ما مثل نسخ صورة إلى موضع آخر، أو تحميلها إلى مكان ما باستخدام الإضافة FileTransfer، فستحتاج إلى الحصول على كائن FileEntry لأجل الصورة المعادة. للقيام بذلك، استدع التابع window.resolveLocalFileSystemURL على عنوان (URI) الملف المُعاد من قبل تطبيق الكاميرا. إن كنت بحاجة إلى استخدام كائن FileEntry، اضبط destinationType عند القيمة Camera.DestinationType.FILE_URI في كائن CameraOptions (هذه هي أيضًا القيمة الافتراضية). ملاحظة تحتاج إلى File plugin لاستدعاء window.resolveLocalFileSystemURL.

هنا استدعاء window.resolveLocalFileSystemURL. يُمرّر عنوان الصورة إلى هذه الدالة من دالة النجاح الخاصة بـ getPicture. تتلقى دالة الاستجابة للنجاح (success handler) الخاصة بـ resolveLocalFileSystemURL الكائن FileEntry.

function getFileEntry(imgUri) {
    window.resolveLocalFileSystemURL(imgUri, function success(fileEntry) {
        // Do something with the FileEntry object, like write to it, upload it, etc.
        // writeFile(fileEntry, imgUri);
        console.log("got file: " + fileEntry.fullPath);
        // displayFileData(fileEntry.nativeURL, "Native URL");
    }, function () {
      // If don't get the FileEntry (which may happen when testing
      // on some emulators), copy to a new FileEntry.
        createNewFileEntry(imgUri);
    });
}

في المثال الموضح في الشيفرة البرمجية السابقة، يمكنك استدعاء دالة التطبيق createNewFileEntry إن لم تحصل على كائن FileEntry صالح. الصورة المعادة من قبل تطبيق الكاميرا يجب أن تُنتج كائن FileEntry صالح، ولكن قد يختلف سلوك المنصات على بعض المحاكيات للملفات المُعادة من منتقي الملفات. يمكنك الاطلاع على مثال عن الكتابة في FileEntry من هنا File plugin README.

تنشئ الشيفرة المعروضة هنا ملفًا في ذاكرة التخزين المؤقت لتطبيقك (في التخزين المحمي sandboxed) باسم tempFile.jpeg. باستخدام كائن FileEntry الجديد، يمكنك نسخ الصورة إلى الملف، أو القيام بشيء آخر مثل تحميلها.

function createNewFileEntry(imgUri) {
    window.resolveLocalFileSystemURL(cordova.file.cacheDirectory, function success(dirEntry) {
        // JPEG file
        dirEntry.getFile("tempFile.jpeg", { create: true, exclusive: false }, function (fileEntry) {
            // Do something with it, like write to it, upload it, etc.
            // writeFile(fileEntry, imgUri);
            console.log("got file: " + fileEntry.fullPath);
            // displayFileData(fileEntry.fullPath, "File copied to");
        }, onErrorCreateFile);
    }, onErrorResolveUrl);
}

مصادر