uni-app【多媒体API】

文章目录

多媒体API

一、图片

uni.chooseImage(OBJECT)

从本地相册选择图片或使用相机拍照。
App端如需要更丰富的相机拍照API(如直接调用前置摄像头),参考plus.camera

OBJECT 参数说明

参数名 类型 必填 说明 平台差异说明
count Number 最多可以选择的图片张数,默认9 见下方说明
sizeTyPE Array original 原图,compressed 压缩图,默认二者都有 App、微信小程序、支付宝小程序、百度小程序
extension Array 根据文件拓展名过滤,每一项都不能是空字符串。默认不过滤。 H5(HBuilder X2.9.9+)
sourceType Array album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项
crop Object 图像裁剪参数,设置后 sizeType 失效 App 3.1.19+
success Function 成功则返回图片的本地文件路径列表 tempFilePaths
fail Function 接口调用失败的回调函数 小程序、App
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

crop 参数说明

参数名 类型 必填 说明 平台差异说明
quality Number 取值范围为1-100,数值越小,质量越低(仅对jpg格式有效)。默认值为80。
width Number 裁剪的宽度,单位为px,用于计算裁剪宽高比。
height Number 裁剪的高度,单位为px,用于计算裁剪宽高比。
resize Boolean 是否将width和height作为裁剪保存图片真实的像素值。默认值为true。注F1a;设置为false时在裁剪编辑界面显示图片的像素值,设置为true时不显示

Tips

  • count 值在 H5 平台的表现,基于浏览器本身的规范。目前测试的结果来看,只能限制单选/多选,并不能限制数量。并且,在实际的手机浏览器很少有能够支持多选的。
  • sourceType 在H5端对应inputcapture属性,设置为['album']无效,依然可以使用相机。
  • 可以通过用户授权API来判断用户是否给应用授予相册或摄像头的访问权限
  • App端如需选择非媒体文件,可在插件市场搜索文件选择,其中AndROId端可以使用Native.js,无需原生插件,而iOS端需要原生插件。
  • 选择照片大多为了上传,uni ui封装了更完善的uni-file-picker组件,文件选择、上传到unicloud的免费存储和cdn中,一站式集成。强烈推荐使用。
注:文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 uni.saveFile,在应用下次启动时才能访问得到。

success 返回参数说明

参数 类型 说明
tempFilePaths Array<String> 图片的本地文件路径列表
tempFiles Array<Object>、Array<File> 图片的本地文件列表,每一项是一个 File 对象

File 对象结构如下

参数 类型 说明
path String 本地文件路径
size Number 本地文件大小,单位:B
name String 包含扩展名的文件名称,仅H5支持
type String 文件类型,仅H5支持

示例

uni.chooseImage({
   
	count: 6, //默认9
	sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
	sourceType: ['album'], //从相册选择
	success: function (res) {
   
		console.LOG(JSON.stringify(res.tempFilePaths));
	}
});

uni.previewImage(OBJECT) @unipreviewimageobject

预览图片。

OBJECT 参数说明

参数名 类型 必填 说明 平台差异说明
current String/Number 详见下方说明 详见下方说明
urls Array 需要预览的图片链接列表
indicator String 图片指示器样式,可取值:“default” - 底部圆点指示器; “number” - 顶部数字指示器; “none” - 不显示指示器。 App
loop Boolean 是否可循环预览,默认值为 false
longPressActions Object 长按图片显示操作菜单,如不填默认为保存相册 App 1.9.5+
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

current 参数说明

1.9.5+ 支持传图片在 urls 中的索引值

current 为当前显示图片的链接/索引值,不填或填写的值无效则为 urls 的第一张。App平台在 1.9.5至1.9.8之间,current为必填。不填会报错
注意,当 urls 中有重复的图片链接时:

  • 传链接,预览结果始终显示该链接在 urls 中第一次出现的位置。
  • 传索引值,在微信/百度/字节跳动小程序平台,会过滤掉传入的 urls 中该索引值之前与其对应图片链接重复的值。其它平台会保留原始的 urls 不会做去重处理。
举例说明: 一组图片 [A, B1, C, B2, D],其中 B1 与 B2 的图片链接是一样的。
  • 传 B2 的链接,预览的结果是 B1,前一张是 A,下一张是 C。
  • 传 B2 的索引值 3,预览的结果是 B2,前一张是 C,下一张是 D。此时在微信/百度/字节跳动小程序平台,最终传入的 urls 是 [A, C, B2, D],过滤掉了与 B2 重复的 B1。

longPressActions 参数说明

参数 类型 必填 说明
iteMList Array 按钮的文字数组
itemColor String 按钮的文字颜色,字符串格式,默认为"#000000"
success Function 接口调用成功的回调函数,详见返回参数说明
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数 类型 说明
index Number 用户长按图片的索引值
tapIndex Number 用户点击按钮列表的索引值
示例
uni.chooseImage({
   
	count: 9,
	sizeType: ['original', 'compressed'],
	sourceType: ['album'],
	success: function(res) {
   
		// 预览图片
		uni.previewImage({
   
			urls: res.tempFilePaths,
			longPressActions: {
   
				itemList: ['发送给朋友', '保存图片', '收藏'],
				success: function(data) {
   
					console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
				},
				fail: function(err) {
   
					console.log(err.errMsg);
				}
			}
		});
	}
});

TIPS

  • 在非H5端,previewImage是原生实现的,界面自定义灵活度较低。
  • 插件市场有前端实现的previewImage,性能低于原生实现,但界面可随意定义;插件市场也有适于App端的previewImage原生插件,提供了更多功能。

uni.closePreviewImage(OBJECT)

关闭预览图片。

App H5 微信小程序 支付宝小程序 百度小程序 字节跳动小程序 飞书小程序 QQ小程序 快手小程序
(3.2.15+) (3.2.15+) x x x x x x x

OBJECT 参数说明

参数 类型 必填 说明
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

uni.getImageInfo(OBJECT)

获取图片信息。
小程序下获取网络图片信息需先配置download域名白名单才能生效。
平台差异说明

App H5 微信小程序 支付宝小程序 百度小程序 字节跳动小程序、飞书小程序 QQ小程序 快手小程序

OBJECT 参数说明

参数 类型 必填 说明
src String 图片的路径,可以是相对路径,临时文件路径,存储文件路径,网络图片路径
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数名 类型 说明 平台差异说明
width Number 图片宽度,单位px
height Number 图片高度,单位px
path String 返回图片的本地路径
orientation String 返回图片的方向,有效值见下表 App、小程序
type String 返回图片的格式 App、小程序

orientation 参数说明

枚举值 说明
up 默认
down 180度旋转
left 逆时针旋转90度
right 顺时针旋转90度
up-mirrored 同up,但水平翻转
down-mirrored 同down,但水平翻转
left-mirrored 同left,但垂直翻转
right-mirrored 同right,但垂直翻转

示例

uni.chooseImage({
   
	count: 1,
	sourceType: ['album'],
	success: function (res) {
   
		uni.getImageInfo({
   
			src: res.tempFilePaths[0],
			success: function (image) {
   
				console.log(image.width);
				console.log(image.height);
			}
		});
	}
});

uni.saveImageToPhotosAlbum(OBJECT)

保存图片到系统相册。
平台差异说明

App H5 微信小程序 支付宝小程序 百度小程序 字节跳动小程序、飞书小程序 QQ小程序 快手小程序
x

OBJECT 参数说明

参数 类型 必填 说明
filePath String 图片文件路径,可以是临时文件路径也可以是永久文件路径,不支持网络图片路径
success Function 接口调用成功的回调函数
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数名 类型 说明
path String 保存到相册的图片路径,仅 App 3.0.5+ 支持
errMsg String 调用结果
注意
  • 可以通过用户授权API来判断用户是否给应用授予相册的访问权限
  • H5没有API可触发保存到相册行为,下载图片时浏览器会询问图片存放地址。

示例代码:

uni.chooseImage({
   
	count: 1,
	sourceType: ['camera'],
	success: function (res) {
   
		uni.saveImageToPhotosAlbum({
   
			filePath: res.tempFilePaths[0],
			success: function () {
   
				console.log('save success');
			}
		});
	}
});

uni.compressImage(OBJECT)

压缩图片接口,可选压缩质量
平台差异说明

App H5 微信小程序 支付宝小程序 百度小程序 字节跳动小程序、飞书小程序 QQ小程序 快手小程序
x √(基础库版本>=3.110.3)

OBJECT 参数说明

属性 类型 默认值 必填 说明 平台差异说明
src String - 图片路径,图片的路径,可以是相对路径、临时文件路径、存储文件路径
quality Number 80 压缩质量,范围0~100,数值越小,质量越低,压缩率越高(仅对jpg有效)
width String auto 缩放图片的宽度,支持像素值(如"100px")、百分比(如"50%“)、自动计算(如"auto”,即根据width与源图宽的缩放比例计算,若未设置width则使用源图宽度) App 3.0.0+
height String auto 缩放图片的高度,支持像素值(如"100px")、百分比(如"50%“)、自动计算(如"auto”,即根据height与源图高的缩放比例计算,若未设置height则使用源图高度) App 3.0.0+
rotate Number 0 旋转度数,范围0~360 App 3.0.0+
success Function - 接口调用成功的回调函数
fail Function - 接口调用失败的回调函数
complete Function - 接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

属性 类型 说明
tempFilePath String 压缩后图片的临时文件路径
示例代码:
uni.compressImage({
   
  src: '/static/logo.jpg',
  quality: 80,
  success: res => {
   
console.log(res.tempFilePath)
  }
})

二、文件

uni.chooseFile(OBJECT)

从本地选择文件。
本API主要用于选择非媒体文件,如果选择的文件是媒体文件,另有3个专用API:

  • 图片选择
  • 视频选择
  • 多媒体文件选择(含图片视频)

平台差异说明

App H5 微信小程序 支付宝小程序 百度小程序 字节跳动小程序、飞书小程序 QQ小程序 快手小程序
x (HBuilder X2.9.9+) x(可使用wx.chooseMessageFile) x x x x x
  • App端如需选择非媒体文件,可在插件市场搜索文件选择,其中Android端可以使用Native.js,无需原生插件,而iOS端需要原生插件。
  • App端如果想选择下载到_doc_downloads_Documents等plus.io控制的目录下的文件,可通过plus.io Api,自己做选择框。
  • 选择文件大多为了上传,uni ui封装了更完善的uni-file-picker组件,文件选择、上传到uniCloud的免费存储和cdn中,一站式集成。强烈推荐使用。

OBJECT 参数说明

参数名 类型 默认值 必填 说明 平台差异说明
count Number 100 最多可以选择的文件数量 见下方说明
type String ‘all’ 所选的文件的类型 见下方说明
extension Array<String> 根据文件拓展名过滤,每一项都不能是空字符串。默认不过滤。 见下方说明
sourceType Array<String> [‘album’,‘camera’] (仅在type为imagevideo时可用)album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项
success Function 成功则返回图片的本地文件路径列表 tempFilePaths
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)  
Tips
  • count 值在 H5 平台的表现,基于浏览器本身的规范。目前测试的结果来看,只能限制单选/多选,并不能限制数量。并且,在实际的手机浏览器很少有能够支持多选的。
  • sourceType 在H5端对应inputcapture属性,设置为['album']无效,依然可以使用相机。
  • extension暂只支持文件后缀名,例如['.zip','.exe','.js'],不支持application/msword等类似值
注:文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 uni.saveFile,在应用下次启动时才能访问得到。 OBJECT.type 的合法值
说明
all 从所有文件选择
video 只能选择视频文件
image 只能选择图片文件
### 微信小程序中使用 UniApp 实现视频播放功能的方法 在微信小程序开发过程中,如果需要通过 UniApp 来实现视频播放功能,则可以利用 `video` 组件并结合自定义逻辑来满足特定需求。以下是详细的解决方案: #### 1. 使用 UniApp 的 `video` 组件 UniApp 提供了一个跨平台的 `<video>` 标签,可以直接用于嵌入视频资源。该标签支持多种属性配置,例如自动播放、循环播放、静音等功能。 ```html <view class="video-container"> <video id="myVideo" :src="videoUrl" controls autoplay loop muted> 您的浏览器不支持 video 标签。 </video> </view> ``` 上述代码片段展示了如何加载一个视频文件[^1]。其中: - `id`: 设置视频实例 ID,便于后续操作。 - `:src`: 动态绑定视频地址。 - `controls`: 显示默认控件(可隐藏并通过自定义 UI 替代)。 - `autoplay`, `loop`, 和 `muted` 是常见的媒体属性。 #### 2. 自定义播放按钮和控制逻辑 由于某些场景下可能不需要默认的时间轴或其他控件,可以通过移除 `controls` 属性并手动创建交互界面来替代默认行为[^2]。 ```html <view class="custom-video-player"> <image src="/static/play-icon.png" @tap="togglePlay"></image> <!-- 自定义播放图标 --> <video id="customVideo" :src="videoUrl" style="display:none;" ref="videoRef"></video> </view> ``` 配合 JavaScript 控制视频状态: ```javascript export default { data() { return { videoUrl: 'https://example.com/video.flv', // FLV 流地址 isPlaying: false, currentVideoContext: null }; }, onLoad() { this.currentVideoContext = uni.createVideoContext('customVideo'); // 初始化上下文 }, methods: { togglePlay() { if (!this.isPlaying) { this.currentVideoContext.play(); } else { this.currentVideoContext.pause(); } this.isPlaying = !this.isPlaying; } } }; ``` 此部分实现了点击图片触发播放/暂停的功能,并且完全去除了默认控件。 #### 3. 支持全屏模式 为了增强用户体验,在移动设备上通常还需要提供进入全屏的能力。这也可以借助 API 完成[^3]。 ```javascript methods: { enterFullScreen() { this.currentVideoContext.requestFullScreen({ direction: 90 // 可选参数指定方向 }); } } ``` 同时可以在模板中增加对应按钮调用这个函数: ```html <button @click="enterFullScreen">全屏观看</button> ``` #### 4. 处理手势滑动调整进度或音量 对于更高级的需求比如拖拽改变播放位置或者调节声音大小,同样能够基于触摸事件监听器达成目标。 ```javascript data() { return { progressTime: { duration: 0, currentTime: 0 } }; }, onReady() { const ctx = uni.createVideoContext('customVideo'); ctx.onTimeUpdate(() => { ctx.getCurrentTime().then(res => { this.progressTime.currentTime = res; }); ctx.getDuration().then(res => { this.progressTime.duration = res; }); }); }, methods: { tapSlider(e) { const { windowWidth, windowHeight } = uni.getSystemInfoSync(); let begin = windowHeight * 0.07; let y = e.changedTouches[0].pageY; let dy = y - begin; let rate = Math.abs(dy / (windowHeight * 0.85)); const timeToSeek = this.progressTime.duration * rate; this.currentVideoContext.seek(timeToSeek); } } ``` 以上代码允许用户垂直滑动手指以快速跳转至不同时间段内的画面。 --- ### 总结 综上所述,通过组合标准 HTML5 `<video>` 元素与额外脚本扩展,即可灵活定制适用于各种业务场景的小程序内视频展示方式。无论是基础还是复杂的要求都能得到妥善解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jyvan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值