- 版本:3.2.1
- GitHub:
- NPM: https://npmjs.net.cn/package/nativescript-camera-overfullscreen
- 下载
- 昨天: 0
- 上周: 0
- 上个月: 0
欢迎使用 NativeScript 框架的 NativeScript Camera Over Fullscreen
插件
先决条件
- 已安装 NativeScript-CLI
使用摄像头插件
概述
几乎每个移动应用都需要捕捉、保存和分享图片的功能。NativeScript摄像头插件旨在处理这项工作的前两部分(拍照和可选保存到设备存储)。
安装
导航到项目文件夹并运行 NativeScript-CLI 命令
tns plugin add nativescript-camera-overfullscreen
插件可以作为标准的npm依赖项添加,运行命令
npm install nativescript-camera-overfullscreen --save
注意:使用
--save
标志将在您的 package.json 文件中将插件添加为依赖项
请求权限
较新版本的 Android 和 iOS 需要显式权限才能使应用访问摄像头并能够保存照片到设备。一旦用户授予权限,即可使用摄像头模块。
camera.requestPermissions();
注意:旧版本不会受 requestPermissions 方法使用的影响。
使用摄像头模块拍照
使用摄像头模块相对简单。然而,有一些要点需要更多的解释。
为了使用摄像头模块,只需像示例 1 中所示一样引入它
示例 1:在应用中引入摄像头模块
var camera = require("nativescript-camera-overfullscreen");
import * as camera from "nativescript-camera-overfullscreen";
然后您就可以使用它了
示例 2:如何拍照并接收图像资源
var imageModule = require("ui/image");
camera.takePicture()
.then(function (imageAsset) {
console.log("Result is an image asset instance");
var image = new imageModule.Image();
image.src = imageAsset;
}).catch(function (err) {
console.log("Error -> " + err.message);
});
import { Image } from "ui/image";
camera.takePicture({).
then((imageAsset) => {
console.log("Result is an image asset instance");
var image = new Image();
image.src = imageAsset;
}).catch((err) => {
console.log("Error -> " + err.message);
});
示例 2 中的代码将启动原生平台摄像头应用。拍照并点击按钮 保存
(Android)或 使用图片
(iOS)后,promise 将解析 then
部分,并将图像资源设置为 ui/image
控件的 src
。
使用选项来拍摄内存高效的图片
示例 2 展示了如何使用 NativeScript 摄像头模块拍照。然而,它拍摄了一个非常大的图片(即使是中端设备也有 500 万像素的摄像头,这意味着 2580x2048 的图片,在位图表示中大约是 15 MB)。在许多情况下,您不需要如此大的图片来显示 100x100 大小的图片,因此拍摄大图片只是浪费内存。camera takePicture() 方法接受一个可选参数,可以帮助解决这个问题。使用该可选参数,您可以设置一些属性,如
- width:图片期望的宽度(以设备独立像素为单位)。
- height:图片期望的高度(以设备独立像素为单位)。
- keepAspectRatio:一个布尔参数,表示是否应保持宽高比。
- saveToGallery:一个布尔参数,表示拍摄的照片是否将被保存到 Android 的“照片”和 iOS 的“相机胶卷”中。
- cameraFacing:从设备的“前置”或“后置”(默认)摄像头开始。当前的实现并不适用于所有 Android 设备,在这种情况下,将回退到默认行为。
什么是“设备无关像素”?NativeScript布局机制在测量UI控件时使用设备无关像素。这允许你声明一个布局,这个布局将类似于所有设备(无论设备的显示分辨率如何)。为了获得高分辨率设备(如iPhone视网膜屏和Android Full HD)的适当图像质量,相机将返回一个具有更大尺寸的图像。例如,如果我们请求一个100x100像素的图像,在iPhone 6上实际图像将是200x200像素(因为其显示密度因子为2 -> 1002x1002)。设置keepAspectRatio
属性可能会导致请求的宽度或高度与预期不同。相机将返回具有正确宽高比的图像,但通常只有一个(宽度和高度中的一个)与请求相同;另一个值将被计算以保留原始图像的宽高比。
示例3展示了如何使用options参数
示例3:如何设置相机模块的
width
、height
、keepAspectRatio
和saveToGallery
属性
var imageModule = require("ui/image");
var options = { width: 300, height: 300, keepAspectRatio: false, saveToGallery: true };
camera.takePicture(options)
.then(function (imageAsset) {
console.log("Size: " + imageAsset.options.width + "x" + imageAsset.options.height);
console.log("keepAspectRatio: " + imageAsset.options.keepAspectRatio);
console.log("Photo saved in Photos/Gallery for Android or in Camera Roll for iOS");
}).catch(function (err) {
console.log("Error -> " + err.message);
});
import { Image } from "ui/image";
var options = { width: 300, height: 300, keepAspectRatio: false, saveToGallery: true };
camera.takePicture(options).
then((imageAsset) => {
console.log("Size: " + imageAsset.options.width + "x" + imageAsset.options.height);
console.log("keepAspectRatio: " + imageAsset.options.keepAspectRatio);
console.log("Photo saved in Photos/Gallery for Android or in Camera Roll for iOS");
}).catch((err) => {
console.log("Error -> " + err.message);
});
检查设备是否有可用的相机
开发人员应该首先检查设备是否有可用的相机。如果相机硬件准备好使用,则方法isAvaiable将返回true;否则返回false。
var isAvailable = camera.isAvailable();
注意:此方法在iOS模拟器中使用时将返回false(因为模拟器没有相机硬件)