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 ではまだ機能していません。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);
        });    
    }

何か案は?ありがとう。

4

1 に答える 1

1

これはすでに伝えられている問題であり、私たちの何人かが購読しています。ここでissue #321を確認してください。

アップデート用。

于 2020-03-03T09:54:34.447 に答える