Как использовать плагины MediaFilePicker и PhotoEditor в Nativescript - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь использовать MediaFilePicker на nativescript и в то же время использовать плагин PhotoEditor для обрезки / редактирования фотографии, снятой с камеры, но у меня это не получается ... вот часть моего кода:

let options: ImagePickerOptions = {
    android: {
        isCaptureMood: true, // if true then camera will open directly.
        isNeedCamera: true,
        maxNumberFiles: 1,
        isNeedFolderList: true
    }, ios: {
        isCaptureMood: true, // if true then camera will open directly.
        maxNumberFiles: 1
    }
 };

 let mediafilepicker = new Mediafilepicker();
 mediafilepicker.openImagePicker(options);

 mediafilepicker.on("getFiles", function (res) {
 let results = res.object.get('results');
 let result = results[0];
 let source = new imageSourceModule.ImageSource();
 source.fromAsset(result.rawData).then((source) => {
     const photoEditor = new PhotoEditor();
     photoEditor.editPhoto({
         imageSource: source,
         hiddenControls: [],
     }).then((newImage) => {            
     }).catch((e) => {
         reject();
         });
     });
 });

Результат объекта FilePicker выглядит следующим образом:

{
"type": "capturedImage",
"file": {},
"rawData": "[Circular]"
}

Я считаю, что если изображение было снято с камеры, то используйте поле rawData, но я не знаю, какой формат подходити как дать его подключить PhotoEditor для игры с ним.

Есть предложения?

Спасибо!

1 Ответ

0 голосов
/ 02 марта 2019

Проблема была в этой строке source.fromAsset(result.rawData) здесь, result.rawData не ImageAsset, а PHAsset.Вам нужно будет создать ImageAsset из PHAsset и передать его fromAsset.Так это будет выглядеть,

         import { ImageAsset } from "tns-core-modules/image-asset";

         ....
         ....
         imgSource.fromAsset(new ImageAsset(img)).then((source) => {
            const photoEditor = new PhotoEditor();
            console.log(source === imgSource);
            photoEditor.editPhoto({
                imageSource: source,
                hiddenControls: [],
            }).then((newImage: ImageSource) => {
                console.log('Get files...');
                // Here you can save newImage, send it to your backend or simply display it in your app

            }).catch((e) => {
                //reject();
            });
        });
...