- 版本:4.0.3
- GitHub:
- NPM: https://npmjs.net.cn/package/%40synerty%2Fnativescript-camera
- 下载
- 昨天: 0
- 上周: 0
- 上个月: 3
NativeScript Camera
欢迎使用 NativeScript 框架的 nativescript-camera
插件
(可选) 前提条件 / 要求
- 已安装 NativeScript-CLI
使用摄像头插件
概述
几乎每个移动应用都需要捕捉、保存和分享图像的功能。NativeScript摄像头插件是为了完成这项工作的前两部分而设计的(拍照和可选地保存到设备存储)。
安装
导航到项目文件夹并运行 NativeScript-CLI 命令
tns plugin add nativescript-camera
插件可以通过标准的 npm 依赖项添加,运行命令
npm install nativescript-camera --save
注意:使用
--save
标志会将插件添加到您的 package.json 文件中的依赖项中
API
方法
方法 | 描述 |
---|---|
takePicture(options?: CameraOptions) | 使用可选的设置不同摄像头选项的参数使用摄像头拍照。 |
requestPermissions() | 检查使用设备摄像头所需的权限。 |
isAvailable() | 设备摄像头是否可用于使用。 |
CameraOptions
属性 | 默认值 | 描述 |
---|---|---|
width | 0 | 定义所需图像的宽度(以设备独立像素为单位)。应与高度属性一起使用。如果使用 keepAspectRatio ,实际图像宽度可能会根据保持原始摄像头图像的宽高比而不同。如果设备的显示密度高于(1)(全高清+分辨率),实际图像宽度将大于请求的宽度。 |
height | 0 | 定义所需图像的高度(以设备独立像素为单位)。应与宽度属性一起使用。如果使用 keepAspectRatio ,实际图像高度可能会根据保持原始摄像头图像的宽高比而不同。如果设备的显示密度高于(1)(全高清+分辨率),实际图像高度将大于请求的高度。 |
keepAspectRatio | true | 定义是否在图片调整大小时保持摄像头图片的宽高比。此属性可能影响宽度和高度返回值。 |
saveToGallery | true | 定义是否将摄像头图片复制到相册(Android)或照片(iOS) |
cameraFacing | rear | 初始摄像头方向。使用 'front' 拍照。 |
注意:在 Android 上,
saveToGallery
选项可能具有意外的行为!某些厂商的摄像头应用(例如 LG)会将所有捕获的图像保存到相册中,无论saveToGallery
的值如何。这种行为不能由摄像头插件控制,如果您必须将捕获的图像排除在照片库之外,您将需要获取本地存储的读写权限,并编写自定义代码来查找相册位置并从中删除新图像。
使用方法
请求权限
Android和iOS的新版本API级别要求明确授权,以便应用程序能够访问相机并将照片保存到设备上。一旦用户授予了权限,就可以使用相机模块。
camera.requestPermissions();
注意:较旧版本不受requestPermissions方法使用的影响。
使用相机模块拍照
使用相机模块相对简单。然而,有一些地方需要更详细的解释。
为了使用相机模块,只需按照示例1中的方法要求它。
示例1:在应用程序中要求相机模块
var camera = require("nativescript-camera");
import * as camera from "nativescript-camera";
然后您就可以开始使用了
示例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,在位图中意味着大约15MB)。在许多情况下,您不需要这样大的图片来显示100x100大小的图片,因此拍摄大图片只是浪费内存。相机takePicture()方法接受一个可选参数,可以帮助解决这个问题。使用该可选参数,您可以设置一些属性,例如:
- width:图片期望的宽度(以设备独立像素为单位)。
- height:图片期望的高度(以设备独立像素为单位)。
- keepAspectRatio:一个布尔参数,表示是否应保持宽高比。
- saveToGallery:一个布尔参数,表示是否将拍照的照片保存到Android的“照片”和iOS的“相机胶卷”中。
- cameraFacing:从设备的“前”(front)或“后”(rear,默认)相机开始。当前实现并不适用于所有Android设备,在这种情况下,将回退到默认行为。
设备独立像素
是什么意思?NativeScript布局机制在测量UI控件时使用设备独立像素。这允许您声明一个布局,并且该布局将在所有设备上看起来相似(无论设备的显示分辨率如何)。为了获得高分辨率设备(如iPhone视网膜和Android全高清)的适当图像质量,相机将返回具有更大维度的图像。例如,如果我们请求一个100x100的图像,在iPhone 6上实际的图像将是200x200(因为其显示密度因子是2 -> 1002x1002)。设置keepAspectRatio
属性可能会导致不同的宽度和高度。相机将返回具有正确宽高比的图像,但通常只有宽度和高度中的一个将与请求相同;另一个值将被计算,以保留原始图像的宽高比。
示例3展示了如何使用选项参数
示例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(因为模拟器没有相机硬件)
贡献
我们喜欢PRs!查看贡献指南。如果您想贡献,但不确定从哪里开始,请查看标记为help wanted
的问题。
获取帮助
请仅使用GitHub问题追踪来报告错误或请求新功能。对于一般问题和支持,请查看NativeScript社区论坛或在我们的NativeScript社区Slack频道中咨询我们的专家。