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 все еще могут устанавливаться по устаревшему id
cordova plugin add org.apache.cordova.camera
Также возможно установить через URL репозитория напрямую (нестабильно)
cordova plugin add https://github.com/apache/cordova-plugin-camera.git
Как внести вклад
Вкладчики приветствуются! Нам нужны ваши contributions, чтобы проект продолжал развиваться. Вы можете [сообщить об ошибках, улучшить документацию или внести код.
Мы рекомендуем использовать специфический рабочий процесс для вкладчиков. Начните с чтения его. Дополнительная информация доступна на нашем вики-сайте.
Есть решение? Отправьте запрос на вытягивание.
Для принятия ваших изменений необходимо подписать и отправить соглашение Apache ICLA (Индивидуальное соглашение о лицензии на вклад). Тогда ваше имя появится в списке подписанных не-коммитеров или коммитеров Cordova.
И не забудьте протестировать и задокументировать свой код.
Особенности 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
-
- .getPicture(successCallback, errorCallback, options)
- .cleanup()
-
.onError :
function -
.onSuccess :
function -
.CameraOptions :
Object
-
-
.DestinationType :
enum -
.EncodingType :
enum -
.MediaType :
enum -
.PictureSourceType :
enum -
.PopoverArrowDirection :
enum -
.Direction :
enum
-
.DestinationType :
camera
camera.getPicture(successCallback, errorCallback, options)
Снимает фотографию с помощью камеры или извлекает фотографию из галереи устройства. Изображение передается в обратный вызов success как закодированная в Base64 String или как URI файла изображения.
Функция camera.getPicture открывает стандартное приложение камеры устройства, которое по умолчанию позволяет пользователям делать снимки — это поведение происходит, когда Camera.sourceType равно Camera.PictureSourceType.CAMERA. После того, как пользователь сделает снимок, приложение камеры закрывается, и приложение восстанавливается.
Если Camera.sourceType равно Camera.PictureSourceType.PHOTOLIBRARY или Camera.PictureSourceType.SAVEDPHOTOALBUM, отображается диалоговое окно, позволяющее пользователю выбрать существующее изображение.
Значение возврата отправляется в обратный вызов cameraSuccess в одном из следующих форматов в зависимости от заданных cameraOptions:
String, содержащая изображение фотографии в кодировке Base64.String, представляющий расположение файла изображения в локальном хранилище (по умолчанию).
Вы можете делать с закодированным изображением или URI все, что хотите, например:
- Отобразить изображение в теге
<img>, как в примере ниже - Сохранить данные локально (
LocalStorage, Lawnchair и т. д.) - Отправить данные на удаленный сервер
ПРИМЕЧАНИЕ: Разрешение фото на более новых устройствах довольно хорошее. Фотографии, выбранные из галереи устройства, не уменьшаются до низкого качества, даже если указан параметр quality. Для предотвращения распространенных проблем с памятью, задайте Camera.destinationType значение FILE_URI вместо DATA_URL.
Поддерживаемые платформы
- Android
- Браузер
- iOS
- Windows
- OSX
Дополнительные примеры здесь. Особенности здесь.
Вид: статический метод 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
Функция обратного вызова, которая предоставляет сообщение об ошибке.
Вид: статический тип camera
| Параметр | Тип | Описание |
|---|---|---|
| message | string | Сообщение предоставляется кодом устройства. |
camera.onSuccess : function
Функция обратного вызова, которая предоставляет данные изображения.
Вид: статический тип 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
Необязательные параметры для настройки параметров камеры.
Вид: статический тип 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
Camera.DestinationType : enum
Определяет формат вывода вызова Camera.getPicture. Примечание: на iOS передача DestinationType.NATIVE_URI вместе с PictureSourceType.PHOTOLIBRARY или PictureSourceType.SAVEDPHOTOALBUM отключит любые изменения изображений (изменение размера, качества, обрезка и т.д.) из-за особенностей реализации.
Тип: статическое свойство перечисления Camera
Свойства
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
| DATA_URL | number | 0 | Возвращает строку, закодированную в base64. DATA_URL может быть очень ресурсоёмким и привести к сбоям приложения или ошибкам недостатка памяти. Используйте FILE_URI или 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 | Выбор изображения только из альбома Camera Roll устройства (то же, что 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 | Направление, в котором должна указывать стрелка на всплывающем окне. |
| [popoverWidth] | Number | 0 | Ширина всплывающего окна (0 или не указано — используется значение по умолчанию Apple). |
| [popoverHeight] | Number | 0 | Высота всплывающего окна (0 или не указано — используется значение по умолчанию Apple). |
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, 300, 600)
});
// 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, 400, 500);
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 (логическое значение, по умолчанию false). Для захвата JPEG, установите в true, чтобы получить данные геолокации в заголовке EXIF. Это вызовет запрос разрешения на геолокацию, если значение установлено в true.
<preference name="CameraUsesGeolocation" value="false" />
Особенности Android
Android использует намерения для запуска деятельности камеры на устройстве для захвата изображений, а на телефонах с низкой памятью активность Cordova может быть убита. В этом случае результат вызова плагина будет передан через событие возобновления. См. Руководство по жизненному циклу Android для получения дополнительной информации. Значение pendingResult.result будет содержать значение, которое будет передано в обратные вызовы (либо URI/URL, либо сообщение об ошибке). Проверьте значение pendingResult.pluginStatus, чтобы определить, был ли вызов успешным.
Особенности браузера
Может возвращать фотографии только в формате изображения, закодированного в Base64.
Особенности iOS
Включение JavaScript alert() в любом из обратных вызовов может вызвать проблемы. Оберните alert в setTimeout(), чтобы позволить iOS-выбору изображения или всплывающему окну полностью закрыться перед отображением 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 только с начальной страницы приложения.
Дополнительную информацию о средствах выбора Windows Phone 8.1 см. здесь: Как продолжить работу приложения Windows Phone после вызова средства выбора файлов
CameraOptions Ошибки
Особенности 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возвращают выбранный файл в его существующей кодировке.
Особенности iOS
При использовании
destinationType.FILE_URI, фотографии сохраняются в временном каталоге приложения. Содержимое временного каталога приложения удаляется при завершении работы приложения.При использовании
destinationType.NATIVE_URIиsourceType.CAMERA, фотографии сохраняются в сохранённом фотоальбоме независимо от значения параметраsaveToPhotoAlbum.При использовании
destinationType.NATIVE_URIиsourceType.PHOTOLIBRARYилиsourceType.SAVEDPHOTOALBUM, все параметры редактирования игнорируются, и ссылка возвращается к исходному изображению.
Пример: Сделать фотографии, выбрать фотографии из галереи и получить миниатюры
Плагин камеры позволяет выполнять такие действия, как открытие приложения камеры устройства и фотографирование, или открытие выбора файла и выбор одного. Приведённые в этом разделе фрагменты кода демонстрируют различные задачи, включая:
- Открыть приложение камеры и сделать фотографию
- Сделать фотографию и вернуть миниатюры (изменённое изображение)
- Сделать фотографию и сгенерировать объект FileEntry
- Выбрать файл из галереи изображений
- Выбрать JPEG-изображение и вернуть миниатюры (изменённое изображение)
- Выбрать изображение и сгенерировать объект FileEntry
Сделать фотографию
Прежде чем вы сможете сделать фотографию, вам необходимо настроить некоторые параметры плагина камеры, которые нужно передать функции 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 — рекомендуемый тип кодирования для Android.
Вы делаете фотографию, передавая объект параметров в 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/9.x/reference/cordova-plugin-camera/index.html