Spec-Zone.ru › Cordova 8

cordova-plugin-camera

Этот плагин определяет глобальный navigator.camera объект, который предоставляет API для фотосъёмки и выбора изображений из системной библиотеки изображений.

Несмотря на то, что объект прикреплён к глобальному пространству имён navigator, он недоступен до возникновения события deviceready.

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

Установка

Требуется cordova 5.0+

cordova plugin add cordova-plugin-camera

Старые версии cordova всё ещё могут установить плагин через **устаревший** идентификатор

cordova plugin add org.apache.cordova.camera

Также возможно установить плагин через URL репозитория напрямую (нестабильно)

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

Как внести свой вклад

Вклад со стороны участников приветствуется! Нам необходим ваш вклад для дальнейшего развития проекта. Вы можете сообщить об ошибках, улучшить документацию или внести код.

Мы рекомендуем использовать специальный поток работы для участников. Начните с прочтения этой страницы. Дополнительная информация доступна на нашем вики.

:warning: Обнаружена ошибка? Отправьте её на трекер проблем JIRA.

Есть решение? Отправьте запрос на добавление.

Для принятия ваших изменений, необходимо подписать и отправить Apache ICLA (договор об авторских правах индивидуального участника). После этого ваше имя появится в списке подписанных не-коммитеров или коммитеров Cordova.

И не забудьте протестировать и документировать свой код.

Эта документация сгенерирована инструментом

:warning: Запустите npm install в репозитории плагина, чтобы включить автоматическое создание документации, если вы планируете отправить PR.
Для создания документации используется jsdoc-to-markdown.
Документация состоит из шаблона и API-документации, сгенерированной из кода плагина JS, и должна быть перегенерирована перед каждым коммитом (автоматически выполняется с помощью husky, выполняя скрипт npm run gen-docs в качестве хука precommit - см. package.json для получения подробностей).

Особенности iOS

С iOS 10 обязательно нужно предоставить описание использования в info.plist, если вы пытаетесь получить доступ к данным, чувствительным к конфиденциальности. Когда система запросит разрешение у пользователя, это описание использования будет отображено в диалоговом окне разрешений, но если вы не предоставите описание использования, приложение аварийно завершит работу перед отображением диалогового окна. Кроме того, Apple отклонит приложения, которые получают доступ к конфиденциальным данным, но не предоставляют описание использования.

Этот плагин требует следующие описания использования:

  • NSCameraUsageDescription указывает причину доступа приложения к камере устройства.
  • NSPhotoLibraryUsageDescription указывает причину доступа приложения к фотобиблиотеке пользователя.
  • NSLocationWhenInUseUsageDescription указывает причину доступа приложения к информации о местоположении пользователя во время использования приложения. (Установите его, если у вас есть параметр CameraUsesGeolocation с значением true)
  • NSPhotoLibraryAddUsageDescription указывает причину доступа приложения к библиотеке фотографий пользователя только для записи.

Чтобы добавить эти записи в 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

    • .getPicture(successCallback, errorCallback, options)
    • .cleanup()
    • .onError : function
    • .onSuccess : function
    • .CameraOptions : Object
  • Camera

    • .DestinationType : enum
    • .EncodingType : enum
    • .MediaType : enum
    • .PictureSourceType : enum
    • .PopoverArrowDirection : enum
    • .Direction : enum
  • CameraPopoverHandle

  • CameraPopoverOptions

camera

camera.getPicture(successCallback, errorCallback, options)

Снимает фотографию с помощью камеры или извлекает фотографию из галереи изображений устройства. Изображение передаётся в обратный вызов успеха в виде закодированного в Base64 String, или как URI файла изображения.

Функция camera.getPicture открывает стандартное приложение камеры устройства, которое по умолчанию позволяет пользователям делать снимки. Это поведение происходит, когда Camera.sourceType равно Camera.PictureSourceType.CAMERA. После того как пользователь сделает снимок, приложение камеры закрывается, и приложение восстанавливается.

Если Camera.sourceType равно Camera.PictureSourceType.PHOTOLIBRARY или Camera.PictureSourceType.SAVEDPHOTOALBUM, отображается диалоговое окно, которое позволяет пользователю выбрать существующее изображение.

Возвращаемое значение отправляется в обратный вызов cameraSuccess, в одном из следующих форматов в зависимости от заданного cameraOptions:

  • Строка String, содержащая изображение, закодированное в Base64.
  • URI String, представляющий расположение файла изображения в локальном хранилище (по умолчанию).

Вы можете сделать всё, что угодно с закодированным изображением или URI, например:

  • Отобразить изображение в теге <img>, как показано в примере ниже
  • Сохранить данные локально (LocalStorage, Lawnchair и т. д.)
  • Отправить данные на удалённый сервер

ПРИМЕЧАНИЕ: Разрешение фотографий на новых устройствах довольно высокое. Фотографии, выбранные из галереи устройства, не масштабируются до более низкого качества, даже если указан параметр quality. Чтобы избежать распространённых проблем с памятью, установите Camera.destinationType в FILE_URI, а не в DATA_URL.

Поддерживаемые платформы

  • Android
  • BlackBerry
  • Браузер
  • Firefox
  • FireOS
  • iOS
  • Windows
  • WP8
  • Ubuntu

Ещё примеры здесь. Особенности здесь.

Тип: статический метод camera

Параметр Тип Описание
successCallback onSuccess
errorCallback onError
options CameraOptions CameraOptions

Пример

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

camera.cleanup()

Удаляет промежуточные файлы изображений, которые сохраняются в временном хранилище после вызова camera.getPicture. Применяется только тогда, когда значение Camera.sourceType равно Camera.PictureSourceType.CAMERA и Camera.destinationType равно Camera.DestinationType.FILE_URI.

Поддерживаемые платформы

  • iOS

Тип: статический метод camera
Пример

navigator.camera.cleanup(onSuccess, onFail);

function onSuccess() {
    console.log("Camera cleanup success.")
}

function onFail(message) {
    alert('Failed because: ' + message);
}

camera.onError : function

Функция обратного вызова, предоставляющая сообщение об ошибке.

Тип: статический typedef camera

Параметр Тип Описание
message string Сообщение предоставляется кодом устройства.

camera.onSuccess : function

Функция обратного вызова, предоставляющая данные изображения.

Тип: статический typedef camera

Параметр Тип Описание
imageData string Base64-кодированные данные изображения или URI файла изображения в зависимости от настроек cameraOptions.

Пример

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

camera.CameraOptions : Object

Необязательные параметры для настройки параметров камеры.

  • Особенности

Тип: статический typedef camera
Свойства

Имя Тип Значение по умолчанию Описание
quality number 50 Качество сохранённого изображения, выраженное в диапазоне от 0 до 100, где 100 соответствует обычно полному разрешению без потерь от сжатия файла. (Обратите внимание, что информация о разрешении камеры недоступна.)
destinationType DestinationType FILE_URI Выберите формат возвращаемого значения.
sourceType PictureSourceType CAMERA Установите источник изображения.
allowEdit Boolean false Разрешить простое редактирование изображения перед выбором.
encodingType EncodingType JPEG Выберите кодирование возвращаемого файла изображения.
targetWidth number Ширина в пикселях для масштабирования изображения. Должно использоваться вместе с targetHeight. Соотношение сторон остаётся постоянным.
targetHeight number Высота в пикселях для масштабирования изображения. Должно использоваться вместе с targetWidth. Соотношение сторон остаётся постоянным.
mediaType MediaType PICTURE Установите тип медиа для выбора. Работает только когда PictureSourceType равно PHOTOLIBRARY или SAVEDPHOTOALBUM.
correctOrientation Boolean Повернуть изображение для исправления ориентации устройства во время захвата.
saveToPhotoAlbum Boolean Сохранить изображение в фотоальбом устройства после захвата.
popoverOptions CameraPopoverOptions Только для iOS, параметры, которые задают расположение всплывающего меню на iPad.
cameraDirection Direction BACK Выберите используемую камеру (передняя или задняя).

Камера

Camera.DestinationType : enum

Определяет формат вывода вызова Camera.getPicture. Примечание: На iOS передача DestinationType.NATIVE_URI вместе с PictureSourceType.PHOTOLIBRARY или PictureSourceType.SAVEDPHOTOALBUM отключит любые изменения изображения (изменение размера, качества, обрезка и т. д.) из-за особенностей реализации.

Тип: статическое свойство перечисления Camera
Свойства

Имя Тип Значение по умолчанию Описание
DATA_URL number 0 Возвращает строку в кодировке base64. DATAURL может быть очень ресурсоёмким и привести к сбоям приложения или ошибкам недостатка памяти. Если возможно, используйте FILEURI или NATIVE_URI
FILE_URI number 1 Возвращает URI файла (content://media/external/images/media/2 для Android)
NATIVE_URI number 2 Возвращает нативный URI (например, asset-library://... для iOS)

Camera.EncodingType : enum

Тип: статическое свойство перечисления Camera
Свойства

Имя Тип Значение по умолчанию Описание
JPEG number 0 Возвращает изображение в формате JPEG
PNG number 1 Возвращает изображение в формате PNG

Camera.MediaType : enum

Тип: статическое свойство перечисления Camera
Свойства

Имя Тип Значение по умолчанию Описание
PICTURE number 0 Разрешает выбор только неподвижных изображений. ПО УМОЛЧАНИЮ. Возвратит формат, указанный через DestinationType
VIDEO number 1 Разрешает выбор только видео, ВОЗВРАЩАЕТ ТОЛЬКО URL
ALLMEDIA number 2 Разрешает выбор всех типов медиа

Camera.PictureSourceType : enum

Определяет формат вывода вызова Camera.getPicture. Примечание: На iOS передача PictureSourceType.PHOTOLIBRARY или PictureSourceType.SAVEDPHOTOALBUM вместе с DestinationType.NATIVE_URI отключит любые изменения изображения (изменение размера, качества, обрезка и т. д.) из-за особенностей реализации.

Тип: статическое свойство перечисления Camera
Свойства

Имя Тип Значение по умолчанию Описание
PHOTOLIBRARY number 0 Выбрать изображение из библиотеки изображений устройства (то же, что SAVEDPHOTOALBUM для Android)
CAMERA number 1 Сделать снимок с камеры
SAVEDPHOTOALBUM number 2 Выбрать изображение только из альбома «Фотоплёнка» устройства (то же, что PHOTOLIBRARY для Android)

Camera.PopoverArrowDirection : enum

Сопоставляет константы iOS UIPopoverArrowDirection для указания расположения стрелки всплывающего меню.

Тип: статическое свойство перечисления Camera
Свойства

Имя Тип Значение по умолчанию
ARROW_UP number 1
ARROW_DOWN number 2
ARROW_LEFT number 4
ARROW_RIGHT number 8
ARROW_ANY number 15

Camera.Direction : enum

Тип: статическое свойство перечисления Camera
Свойства

Имя Тип Значение по умолчанию Описание
BACK number 0 Использовать заднюю камеру
FRONT number 1 Использовать переднюю камеру

CameraPopoverOptions

Только для iOS, параметры, которые задают расположение элемента якоря и направление стрелки всплывающего меню при выборе изображений из библиотеки или альбома iPad. Обратите внимание, что размер всплывающего меню может измениться для адаптации к направлению стрелки и ориентации экрана. Учитывайте изменения ориентации при указании расположения элемента якоря.

Параметр Тип Значение по умолчанию Описание
[x] Number 0 Координата x пикселей элемента экрана, к которому привязывается всплывающее меню.
[y] Number 32 Координата y пикселей элемента экрана, к которому привязывается всплывающее меню.
[width] Number 320 Ширина в пикселях элемента экрана, к которому привязывается всплывающее меню.
[height] Number 480 Высота в пикселях элемента экрана, к которому привязывается всплывающее меню.
[arrowDir] PopoverArrowDirection ARROW_ANY Направление, в котором стрелка на всплывающем меню должна указывать.

CameraPopoverHandle

Обработчик всплывающего меню выбора изображения.

Поддерживаемые платформы

  • iOS

Пример

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 Ошибки

Пример

Сделать снимок и получить расположение файла изображения:

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 (boolean, по умолчанию false). Для захвата JPEG, установите значение в true, чтобы получить данные геолокации в заголовке EXIF. Это вызовет запрос на разрешение геолокации, если значение установлено в true.

    <preference name="CameraUsesGeolocation" value="false" />
    

Особенности Amazon Fire OS

Amazon Fire OS использует интенты для запуска активности камеры на устройстве для захвата изображений, а на телефонах с малым объёмом оперативной памяти активность Cordova может быть убита. В этом случае изображение может не отобразиться при восстановлении активности Cordova.

Особенности Android

Android использует интенты для запуска активности камеры на устройстве для захвата изображений, а на телефонах с малым объёмом оперативной памяти активность Cordova может быть убита. В этом случае результат вызова плагина будет передан через событие возобновления. См. руководство по жизненному циклу Android для получения дополнительной информации. Значение pendingResult.result будет содержать значение, которое будет передано в обратные вызовы (либо URI/URL, либо сообщение об ошибке). Проверьте значение pendingResult.pluginStatus , чтобы определить, был ли вызов успешным.

Особенности браузера

Может возвращать фотографии только в виде изображения в кодировке Base64.

Особенности Firefox OS

Плагин камеры в настоящее время реализован с использованием Web Activities.

Особенности iOS

Включение JavaScript alert() в любом из функций обратного вызова может привести к проблемам. Оберните alert в setTimeout() , чтобы позволить iOS image picker или popover полностью закрыться перед отображением alert:

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

Особенности Windows Phone 7

Вызов приложения камеры в то время, когда устройство подключено через Zune, не работает и вызывает обратный вызов с ошибкой.

Особенности Windows

В Windows Phone 8.1 использование SAVEDPHOTOALBUM или PHOTOLIBRARY в качестве типа источника приводит к приостановке приложения до тех пор, пока файловый выборщик не вернёт выбранное изображение, а затем к восстановлению с начальной страницей, как определено в config.xml приложения. В случае, когда camera.getPicture был вызван с другой страницы, это приведёт к перезагрузке начальной страницы с нуля, и обратные вызовы успеха и ошибки никогда не будут вызваны.

Чтобы избежать этого, рекомендуется использовать шаблон SPA или вызывать camera.getPicture только с начальной страницы вашего приложения.

Дополнительную информацию об API выборщиков Windows Phone 8.1 можно найти здесь: Как продолжить работу приложения Windows Phone после вызова файлового выборщика

Особенности Tizen

Tizen поддерживает только destinationType Camera.DestinationType.FILE_URI и sourceType Camera.PictureSourceType.PHOTOLIBRARY.

CameraOptions

Особенности Amazon Fire OS

  • Любое значение cameraDirection приводит к фото с задней камерой.

  • Игнорирует параметр allowEdit.

  • Camera.PictureSourceType.PHOTOLIBRARY и Camera.PictureSourceType.SAVEDPHOTOALBUM отображают один и тот же фотоальбом.

Особенности Android

  • Любое значение cameraDirection приводит к фото с задней камерой.

  • allowEdit непредсказуем на Android и не должен использоваться! Реализация этого плагина на Android пытается найти и использовать приложение на устройстве пользователя для обрезки изображений. Плагин не контролирует, какое приложение пользователь выбирает для обрезки изображения, и очень вероятно, что пользователь выберет несовместимый вариант, что приведёт к сбою плагина. Иногда это работает, потому что большинство устройств поставляются с приложением, которое обрабатывает обрезку совместимым образом (Google Plus Photos), но полагаться на это не следует. Если редактирование изображений необходимо для вашего приложения, рассмотрите использование сторонней библиотеки или плагина, который предоставляет собственный инструмент для редактирования изображений, для более надёжного решения.

  • 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 OS

  • Игнорирует параметр 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

  • Неподдерживаемые параметры.

  • Всегда возвращает FILE URI.

Особенности Windows Phone 7 и 8

  • Игнорирует параметр allowEdit.

  • Игнорирует параметр correctOrientation.

  • Игнорирует параметр cameraDirection.

  • Игнорирует параметр saveToPhotoAlbum. ВАЖНО: все изображения, сделанные с помощью API камеры Cordova WP8/8, всегда копируются в фотоплёнку телефона. В зависимости от настроек пользователя, это также может означать автоматическую загрузку изображения в OneDrive. Это потенциально может означать, что изображение доступно более широкой аудитории, чем планировалось вашим приложением. Если это является проблемой для вашего приложения, вам нужно реализовать CameraCaptureTask, как документировано в MSDN. Вы также можете прокомментировать или проголосовать за соответствующий вопрос в системе отслеживания ошибок.

  • Игнорирует свойство mediaType cameraOptions, так как Windows Phone SDK не предоставляет способ выбора видео из PHOTOLIBRARY.

Пример: Сделать фото, выбрать фото из фотогалереи и получить миниатюры

Плагин Camera позволяет выполнять такие действия, как открытие приложения камеры устройства и создание фото, или открытие файлового выборщика и выбор одного файла. Приведённые в этом разделе фрагменты кода демонстрируют различные задачи, включая:

  • Открытие приложения камеры и создание фото
  • Создание фото и возврат миниатюр (изменённое изображение)
  • Создание фото и создание объекта FileEntry
  • Выбор файла из фотогалереи
  • Выбор JPEG-изображения и возврат миниатюр (изменённое изображение)
  • Выбор изображения и создание объекта FileEntry

Создание фото

Перед созданием фото вам необходимо установить некоторые параметры плагина Camera, чтобы передать их в функцию getPicture плагина Camera. Вот общий набор рекомендаций. В этом примере вы создаёте объект, который будете использовать для параметров камеры, и устанавливаете 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. Рекомендуемый тип кодирования для Android — 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. Например, в Windows 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. В этом примере вы изменяете размер возвращаемого изображения так, чтобы оно поместилось в рамку 100x100 пикселей (сохраняется соотношение сторон, поэтому 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 так же, как и в предыдущем примере, передав обратные вызовы успеха и ошибки вместе с объектом 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, чтобы вызвать window.resolveLocalFileSystemURL.

Вот вызов window.resolveLocalFileSystemURL. URI изображения передаётся в эту функцию из обратного вызова успеха getPicture. Обработчик успеха 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. URI изображения, возвращённый приложением камеры, должен привести к созданию действительного объекта FileEntry, но поведение платформы в некоторых эмуляторах может отличаться для файлов, возвращённых файловым выборщиком.

Примечание Пример записи в FileEntry см. в README плагина File.

Здесь создаётся файл в кэше вашего приложения (в защищённом хранилище) с именем 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);
}

© 2012, 2013, 2015 The Apache Software Foundation
Licensed under the Apache License 2.0.
https://cordova.apache.org/docs/en/8.x/reference/cordova-plugin-camera/index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API