Nativescript如何将图像保存到自定义组件中的文件
我已经创建了一个自定义组件,可以访问设备的摄像头来捕捉图片,将其设置为ImageView的源,然后将其保存到文件中。 下面是Javascript代码 CAMERA.JS 以下是imageView的初始化Nativescript如何将图像保存到自定义组件中的文件,nativescript,Nativescript,我已经创建了一个自定义组件,可以访问设备的摄像头来捕捉图片,将其设置为ImageView的源,然后将其保存到文件中。 下面是Javascript代码 CAMERA.JS 以下是imageView的初始化 export function cameraLoaded(args):void{ cameraPage = <Page> args.object; imageView = <Image> cameraPage.getViewById("img_upload
export function cameraLoaded(args):void{
cameraPage = <Page> args.object;
imageView = <Image> cameraPage.getViewById("img_upload");...
}
这很好用
现在我尝试将图片保存到文件中
export function saveToFile():void{
try {
let saved = imageView.imageSource.saveToFile(path,enums.ImageFormat.png);
HalooseLogger.log(saved,"upload");
})
}catch (e){
...
}
}
这里我得到一个错误,无法读取未定义的属性saveToFile
这是非常不寻常的,事实上,如果I console.logimageView这里是输出:
Image<img_upload>@file:///app/views/camera/camera.xml:4:5;
MAIN.JS
这就是动态加载摄影机视图的情况
export function loaded(args):void{
mainPage = <Page>args.object;
contentWrapper = mainPage.getViewById("mainContainer");
DynamicLoaderService.loadPage(mainPage,contentWrapper,mainViewModel.currentActive);
}
问题是,从NativeScript 2.4.0开始,为Android创建的图像的属性imageSource将始终返回null。目前,正在进行优化,以防止在处理多个大型图像时出现与内存不足相关的问题,这就是为什么图像资源出现在nativeScript 2.4.0中 现在我不确定你是否使用了最新的高度推荐,但是如果是的话,你应该考虑到SuffFIX的承诺是返回IMASSET。由于内存优化,对于Android,imageSource将始终返回undefined,除非您专门创建一个。您可以通过提供从摄影机回调返回的ImageAsset的fromAsset方法来实现这一点 例如:
import { EventData } from 'data/observable';
import { Page } from 'ui/page';
import { Image } from "ui/image";
import { ImageSource, fromAsset } from "image-source";
import { ImageAsset } from "image-asset";
import * as camera from "nativescript-camera";
import * as fs from "file-system";
var imageModule = require("ui/image");
var img;
var myImageSource: ImageSource;
// Event handler for Page "navigatingTo" event attached in main-page.xml
export function onLoaded(args: EventData) {
// Get the event sender
let page = <Page>args.object;
img = <Image>page.getViewById("img");
camera.requestPermissions();
}
export function takePhoto() {
camera.takePicture()
.then(imageAsset => {
console.log("Result is an image asset instance");
img.src = imageAsset;
fromAsset(imageAsset).then(res => {
myImageSource = res;
console.log(myImageSource);
})
}).catch(function (err) {
console.log("Error -> " + err.message);
});
}
export function saveToFile(): void {
var knownPath = fs.knownFolders.documents();
var folderPath = fs.path.join(knownPath.path, "CosmosDataBank");
var folder = fs.Folder.fromPath(folderPath);
var path = fs.path.join(folderPath, "Test.png");
var saved = myImageSource.saveToFile(path, "png");
console.log(saved);
}
成功了!我在哪里可以了解这些新插件和操作方法?
export function loaded(args):void{
mainPage = <Page>args.object;
contentWrapper = mainPage.getViewById("mainContainer");
DynamicLoaderService.loadPage(mainPage,contentWrapper,mainViewModel.currentActive);
}
public static loadPage(pageElement,parentElement,currentActive):void{
let component = Builder.load({
path : "views/camera",
name : "camera",
page : pageElement
});
parentElement.addChild(component);
}
import { EventData } from 'data/observable';
import { Page } from 'ui/page';
import { Image } from "ui/image";
import { ImageSource, fromAsset } from "image-source";
import { ImageAsset } from "image-asset";
import * as camera from "nativescript-camera";
import * as fs from "file-system";
var imageModule = require("ui/image");
var img;
var myImageSource: ImageSource;
// Event handler for Page "navigatingTo" event attached in main-page.xml
export function onLoaded(args: EventData) {
// Get the event sender
let page = <Page>args.object;
img = <Image>page.getViewById("img");
camera.requestPermissions();
}
export function takePhoto() {
camera.takePicture()
.then(imageAsset => {
console.log("Result is an image asset instance");
img.src = imageAsset;
fromAsset(imageAsset).then(res => {
myImageSource = res;
console.log(myImageSource);
})
}).catch(function (err) {
console.log("Error -> " + err.message);
});
}
export function saveToFile(): void {
var knownPath = fs.knownFolders.documents();
var folderPath = fs.path.join(knownPath.path, "CosmosDataBank");
var folder = fs.Folder.fromPath(folderPath);
var path = fs.path.join(folderPath, "Test.png");
var saved = myImageSource.saveToFile(path, "png");
console.log(saved);
}