Родной скрипт imagepicker не работает в iOS :: не выбирает путь к изображению? - PullRequest
0 голосов
/ 03 марта 2020

Я использую Nativescript с Angular и у меня есть страница, где я фотографирую квитанцию ​​или добавляю из галереи, добавляю несколько текстовых вводов и отправляю на сервер.

Функция Добавить из галереи работает нормально в Android но не в iOS.

Вот код шаблона:

<Image *ngIf="imageSrc" [src]="imageSrc" [width]="previewSize" [height]="previewSize" stretch="aspectFit"></Image>

<Button text="Pick from Gallery" (tap)="onSelectGalleryTap()" class="btn-outline btn-photo"> </Button>

и компонент:

    public onSelectGalleryTap() {
        let context = imagepicker.create({
            mode: "single"
        });
        let that = this;
        context
        .authorize()
        .then(() => {
            that.imageAssets = [];
            that.imageSrc = null;
            return context.present();
        })
        .then((selection) => {
            alert("Selection done: " + JSON.stringify(selection));
            that.imageSrc = selection.length > 0 ? selection[0] : null;
            // convert ImageAsset to ImageSource                        
            fromAsset(that.imageSrc).then(res => {
                var myImageSource = res;
                var base64 = myImageSource.toBase64String("jpeg", 20);                       
                this.expense.receipt_data=base64;                          
            })   
            that.cameraImage=null;
            that.imageAssets = selection;
            that.galleryProvided=true;

            // set the images to be loaded from the assets with optimal sizes (optimize memory usage)
            selection.forEach(function (element) {
                element.options.width = that.previewSize;
                element.options.height = that.previewSize;
            });
        }).catch(function (e) {
            console.log(e);
        });    
    }

Я разместил под скриншотами Android и iOS строки :

alert("Selection done: " + JSON.stringify(selection));

В Android есть путь к расположению изображения в файловой системе, но в iOS есть только пустые фигурные скобки, где я ожидаю увидеть путь, а затем при отправке сообщения возвращается «Невозможно сохранить изображение», хотя предварительный просмотр изображения отображается на странице в изображении.

Вот снимки экрана:

Android:

enter image description here

iOS:

enter image description here

Любые идеи, почему он терпит неудачу в iOS?

Спасибо

==========

ОБНОВЛЕНИЕ

Теперь я сохраняю изображение во временном местоположении и оно все еще не работает в iOS. Работает в Android.

Вот мой код сейчас.

import { ImageAsset } from 'tns-core-modules/image-asset';
import { ImageSource, fromAsset, fromFile } from 'tns-core-modules/image-source';
import * as fileSystem from "tns-core-modules/file-system";

...
...
    public onSelectGalleryTap() {
        alert("in onSelectGalleryTap");
        var milliseconds=(new Date).getTime();
        let context = imagepicker.create({
            mode: "single"
        });
        let that = this;
        context
        .authorize()
        .then(() => {
            that.imageAssets = [];
            that.previewSrc = null;
            that.imageSrc = null;
            return context.present();
        })
        .then((selection) => {

            that.imageSrc = selection.length > 0 ? selection[0] : null;
            // convert ImageAsset to ImageSource                        
            fromAsset(that.imageSrc)
            .then(res => {
                var myImageSource = res;

                let folder=fileSystem.knownFolders.documents();
                var path=fileSystem.path.join(folder.path, milliseconds+".jpg");
                var saved=myImageSource.saveToFile(path, "jpg");
                that.previewSrc=path;

                const imageFromLocalFile: ImageSource = <ImageSource> fromFile(path);

                var base64 = imageFromLocalFile.toBase64String("jpeg", 20);  

                this.expense.receipt_data=base64;                        
            })   
            that.cameraImage=null;
            that.imageAssets = selection;
            that.galleryProvided=true;

            // set the images to be loaded from the assets with optimal sizes (optimize memory usage)
            selection.forEach(function (element) {
                element.options.width = that.previewSize;
                element.options.height = that.previewSize;
            });
        }).catch(function (e) {
            console.log(e);
        });    
    }

Есть идеи? Спасибо.

1 Ответ

0 голосов
/ 03 марта 2020

Это уже сообщенная проблема, на которую подписались несколько человек, проверьте здесь проблема # 321

для получения обновлений.

...