1

我正在使用带有 Angular 的 Nativescript,并且有一个页面,我可以在其中拍摄收据或从图库中添加,并添加几个文本输入并发送到服务器。

从库中添加在 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 中,只有空的大括号,我希望在其中看到路径,然后在提交时返回消息是“无法保存图像”,尽管图像预览显示在图像页面上。

以下是截图:

安卓:

在此处输入图像描述

IOS:

在此处输入图像描述

任何想法为什么它在iOS中失败?

谢谢

==========

更新

我现在将图像保存到一个临时位置,但它仍然无法在 iOS 中运行。它适用于安卓系统。

这是我现在的代码。

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);
        });    
    }

有任何想法吗?谢谢。

4

1 回答 1

1

这是一个已经沟通过的问题,我们中的一些人订阅了,请查看这里issue #321

更新。

于 2020-03-03T09:54:34.447 回答