upImageModule 相册相机模块
模块概述
为H5页面提供对本地图片资源的浏览、读取,使用相机以及保存图片到相册等功能
方法列表
- imagePicker(打开图片浏览)
- openCamera(打开相机)
- saveImages(保存图片到相册)
- fileToBase64 (file格式文件转换base64格式)
公共数据
所有数据均以JSON结构返回,由代码,信息和数据三部分组成
{
"retCode": "000000", //接口状态标识码,错误标识码以18开头
"retInfo": "执行成功",//接口信息说明
"retData": null //业务数据
}
具体定义:返回数据通用
模块变更记录
V3.0.0
- 方法变更:
- openCamera(打开相机)成功回调返回值retData的内部字段删除duration(视频时长)增加eventType(用户点击事件类型)
- 方法变更:
V3.1.0
- 删除方法:
- closePicker (关闭图片浏览)
- 新增方法:
- fileToBase64 (file格式文件转换base64格式)
- 删除方法:
V3.2.0
- 相机相册模块未定义的retCode编码按照通用数据规定变为990001,操作失败retCode变为000001,非法参数错误retCode变为000002
- 方法变更:
- openCamera(打开相机)成功回调返回值retData的data,base64Data结构变化,data统一有以‘file://’开头, base64Data统一以‘data:image/jpeg;base64,’开头
- imagePicker(打开图片浏览)成功回调返回返回值retData中的path,thumbPath结构变化,path,thumbPath统一带有'file://'前缀 注:android中nebula容器,path,thumbPath统一带有https://virtual.uplus.com/file://前缀,如:'https://virtual.uplus.com/file:///storage/emulated/0/DCIM/Screenshots………………'
3.7.0-beta19
- 方法变更:
- openCamera({params}) params参数中新增isDefaultOriginal参数,用来表示是否默认选中原图,true选中原图,false不选中原图,不传默认为 不选中原图
- 方法变更:
3.7.0-beta37
- 方法变更:
- imagePicker({params}) params参数中新增clipPicParam(裁剪框比例 0代表1:1 1代表3:2 2代表2:3 3代表4:3 4代表3:4 5代表16:9 6代表9:16 多种比例时可以以英文逗号分隔,比如:0,1代表1:1和3:2)以及singleFileSizeByteLimit(单个图片/视频的大小限制(单位byte))
- 方法变更:
4.0.0-beta33
- 方法变更:
- 重构相机相册插件
- 删除transPath(图片地址转换)
- 方法变更:
4.0.0-upgrade04
- 方法变更:
- imagePicker({params})返回值新增width、height属性
- 方法变更:
方法说明
imagePicker
imagePicker({params})
使用说明
通过imagePicker方法,可以拉起一个全屏显示用户相册界面,选择完成后返回页面进行加载,或者直接点击取消。成功回调可能包括两种情况:
直接点击取消按钮
选中一定数量图片点击下一步
特别注意:
返回的图片路径带有 file://前缀,如:'file:///storage/emulated/0/DCIM/Screenshots………………'
适用性
容器 | Nebula |
---|---|
支持情况 | 是 |
APP版本 | 6.12.0 及以上 |
params 输入参数
属性名 | 数据类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
max | Number | 否 | 9 | 最多选择几张图片 |
typeMode | Number | 否 | 0 | 0-图片;1-视频;2-图片和视频 |
singleChoice | Boolean | 否 | false | 是否选择单张 |
showCamera | Boolean | 否 | false | 是否显示拍照按钮(flutter相册目前不支持) |
tips | String | 否 | "" | 最上面的提示文本(flutter相册目前不支持) |
cropImage | Boolean | 否 | false | 是否编辑图片 |
showOriginalBtn | Boolean | 否 | true | 是否显示原图按钮 |
videoLimitSecond | Number | 否 | 30 | 单个视频总时长限制(单位 秒) |
allFileSizeByteLimit | Number | 否 | 50 * 9 * 1024 * 1024 | 文件总大小限制(单位 byte) |
isDefaultOriginal | Boolean | 否 | false | 是否默认选中原图 |
clipPicParam | String | 否 | "" | 裁剪框比例(仅限单选模式) 0代表1:1 1代表3:2 2代表2:3 3代表4:3 4代表3:4 5代表16:9 6代表9:16 多种比例时可以以英文逗号分隔,比如:0,1代表1:1和3:2 |
singleFileSizeByteLimit | String | 否 | 1000 * 1024 * 1024 | 单个图片/视频的大小限制(单位字节byte) |
错误返回 retCode说明
retCode编码 | retInfo说明 |
---|---|
180002 | 用户取消图片选择 |
180003 | 图片浏览失败 |
正确返回 retData说明
属性名 | 数据类型 | 说明 |
---|---|---|
eventType | String | 用户点击事件类型,取值范围:见下方eventType取值范围说明 |
list | Array | 返回选定的图片信息数组,见下方list单独说明 |
eventType取值范围说明
取值 | 说明 |
---|---|
nextStep | 用户点击【下一步】/【确定】 按钮 |
cancel | 用户点击取消按钮 |
list属性
属性名 | 数据类型 | 说明 |
---|---|---|
path | String | 图片路径,注意:在APICloud容器的iOS 平台上,因为系统原因,需要用 transPath 方法转换之后才可读取原图 |
thumbPath | String | 缩略图路径 |
width | String | 缩略图宽度 |
height | String | 缩略图高度 |
exif | Array | 额外信息,见下方exif单独说明 |
exif属性
属性名 | 数据类型 | 说明 |
---|---|---|
size | String | 图片大小(单位kb) |
orientation | String | 旋转角度(可能为空) |
示例
upImageModule.imagePicker({
max: 9,
typeMode: 2,
singleChoice: false,
showCamera: false,
tips: '请选择照片',
cropImage: false,
showOriginalBtn: true,
videoLimitSecond: 270,
allFileSizeByteLimit: 450
isDefaultOriginal:true
}).then((res) => {
alert(JSON.stringify(res));
console.log('success:getCache', res);
}).catch((err) => {
alert(JSON.stringify(err));
});
});
成功返回的retData (以apicloud容器为例)
{
eventType: 'nextStep',
list: [{
path: 'file:///storage/emulated/0/DCIM/Screenshots/Screenshot_2019-07-16-16-25-47-978_com.haier.uhome.uplus.png',
thumbPath: 'file:///storage/emulated/0/Android/data/com.haier.uhome.uplus/cache/Screenshot_2019-07-16-16-25-47-978_com.haier.uhome.uplus.png',
width: '100',
height: '100'
exif {
size: '1024',
orientation: ''(可能为空)
}
}]
}
openCamera
openCamera({params})
使用说明
如图所示,可以直接调用相机功能,打开拍照,若直接点击X号,代表用户取消拍照,若用户拍照,接着进入下面步骤
如下图所示,用户拍照后,出现X和V,若选择X,代表用户不保存当前图片,重新回到上图拍照界面; 若用户选择V,代表用户拍照完成,系统生成了图片路径,此时,可以从成功回调中获取到图片的相关信息
注意:返回base64格式的图片带逗号及逗号前面部分,例:‘data:image/jpeg;base64,/9j/4AAQSkZJ………………’,返回file协议的图片带有file://, 例如:‘file:///storage/emulated/0/UZMap………………’
适用性
容器 | Nebula |
---|---|
支持情况 | 是 |
APP版本 | 6.12.0 及以上 |
params 输入参数
属性名 | 数据类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
saveToPhotoAlbum | Boolean | 否 | false | 拍照后是否保存到相册 |
destinationType | Number | 否 | 1 | 返回数据类型,1表示返回图片地址;2表示图片经过base64编码后的字符串 |
quality | Number | 否 | 50 | 图片质量,取值范围是0-100。0、100表示使用图片原始分辨率,没有压缩 |
错误返回 retCode说明
retCode编码 | retInfo说明 |
---|---|
180001 | 获取相机权限失败 |
180002 | 用户取消拍照 |
180003 | 拍照失败 |
正确返回 retData说明
属性名 | 数据类型 | 说明 |
---|---|---|
eventType | String | 用户点击事件类型,取值范围:见下方eventType取值范围说明 |
data | String | 图片路径 |
base64Data | String | base64数据,destinationType为2时返回 |
eventType取值范围说明
取值 | 说明 |
---|---|
nextStep | 用户点击【下一步】/【确定】 按钮 |
cancel | 用户点击取消按钮 |
示例
upImageModule.openCamera({destinationType: 2}).then((result) => {
console.log('result',result);
},(err)=>{
console.log('err',err);
})
成功返回的retData(参数destinationType===1 && 拍照保存时)
{
eventType:'nextStep',
base64Data:"",
data:"file:///storage/emulated/0/UZMap/A6095626649427/picture/p-709a9ed1.jpg"
}
成功返回的retData(参数destinationType===2 && 拍照保存时)
{
eventType:'nextStep',
data:"file:///storage/emulated/0/UZMap/A6095626649427/picture/p-709a9ed1.jpg",
base64Data:"data:image/jpeg;base64,/9j/4AAQSkZJ………………"
}
成功返回的retData(直接取消时)
{
eventType:'cancel',
data:"",
base64Data:""
}
saveImages
saveImages({params})
使用说明
将一张base64编码,或者符合file协议的图片保存到本地相册
注:file协议,本地文件传输协议,主要用于访问本地计算机中的文件。file协议的基本格式是 file:///文件路径 这里保存file协议的图片到本地相册的意义是:有的图片虽然在本地,但是从相册看不到,通过这个方法可以保存这种特殊图片到相册里,然后可以使用imagePicker方法再从相册选择图片进行其他操作
适用性
容器 | Nebula |
---|---|
支持情况 | 是 |
APP版本 | 6.12.0 及以上 |
params 输入参数
属性名 | 数据类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
images | Array | 是 | / | 需要保存的图片数组,目前数组中只能放一个字符串元素,且图片只支持:base64(注意,iOS需要去掉'data:image/png;base64,'的前缀),file协议 |
错误返回 retCode说明
retCode编码 | retInfo说明 |
---|---|
180001 | 获取相册权限失败/保存异常/参数无效(入参) |
正确返回 retData说明
无
示例
upImageModule.saveImages({images: ['file:///a.png']}).then((result) => {
console.log('result',result);
},(err)=>{
console.log('err',err);
})
fileToBase64
fileToBase64({params})
使用说明
此方法将file协议的文件转换为base64格式,可与imagePicker方法一起使用,将返回的图片路径转换为base64格式使用。
注:file协议,本地文件传输协议,主要用于访问本地计算机中的文件。file协议的基本格式是 file:///文件路径,此方法中不需要file://前缀
适用性
容器 | Nebula |
---|---|
支持情况 | 是 |
APP版本 | 6.12.0 及以上 |
params 输入参数
属性名 | 数据类型 | 是否必填 | 默认值 | 说明 |
---|---|---|---|---|
filePaths | Array | 是 | / | 需要转换的的file协议路径 |
错误返回 retCode说明
retCode编码 | retInfo说明 |
---|---|
180002 | 没有存储/读写的权限 |
180003 | 参数无效(入参) |
正确返回 retData说明
{
"retCode": "000000",
"retInfo": "执行成功",
"retData": [resultModel]
}
单条路径转换结果 resultModel
{
"code" : "000000",
"Info" : "执行成功",
"filePath" : "文件路径",
"base64data" : "base64字符串",
}
resultModel字段说明
属性名 | 数据类型 | 说明 |
---|---|---|
code | String | 单条路径转换返回码,code范围见下表 |
info | String | 结果信息,info范围见下表 |
filePath | String | 原文件file协议路径(不带file://前缀) |
base64Data | String | base64数据 |
code字段说明
code编码 | info说明 |
---|---|
000000 | 转换成功 |
230005 | 文件路径为空 |
230006 | 文件不存在 |
示例
upImageModule.fileToBase64({filePaths: ['/storage/emulated/0/haier/images/pick.jpeg','/storage/emulated/0/haier/images/pick.jpeg']}).then((result) => {
console.log('result',result);
},(err)=>{
console.log('err',err);
})
成功返回的retdata
retData:[{
base64Data:"/9j/4AAQSkZJRgABAQAAAQABAAD/2……………………"
code:"000000"
filePath:"/storage/emulated/0/haier/images/pick.jpeg"
info:"转换成功"
},
{
base64Data:"AQABAAD/2wBDAAEBAQEBAQEBAQEBAQEB……………………"
code:"000000"
filePath:"/storage/emulated/0/haier/images/haha.jpg"
info:"转换成功"
}]