A runtime library for uni-app's app-plus platform, which provides mobile app functionality for the uni-app cross-platform framework
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Comprehensive image, video, audio processing and camera integration capabilities.
Choose, preview, and manipulate images from camera or gallery.
/**
* Choose image from camera or gallery
* @param options - Image selection options
*/
function chooseImage(options?: ChooseImageOptions): void;
/**
* Preview image with zoom and swipe functionality
* @param options - Preview options
*/
function previewImage(options: PreviewImageOptions): void;
/**
* Get image information including dimensions and file size
* @param options - Get image info options
*/
function getImageInfo(options: GetImageInfoOptions): void;
/**
* Compress image to reduce file size
* @param options - Compression options
*/
function compressImage(options: CompressImageOptions): void;
/**
* Save image to device photo album
* @param options - Save image options
*/
function saveImageToPhotosAlbum(options: SaveImageToPhotosAlbumOptions): void;
interface ChooseImageOptions {
count?: number; // Default 9
sizeType?: ('original' | 'compressed')[];
sourceType?: ('album' | 'camera')[];
extension?: string[];
success?: (result: ChooseImageResult) => void;
fail?: (error: any) => void;
complete?: () => void;
}
interface ChooseImageResult {
tempFilePaths: string[];
tempFiles: ImageFile[];
}
interface ImageFile {
path: string;
size: number;
name: string;
type: string;
}
interface PreviewImageOptions {
current?: string;
urls: string[];
indicator?: 'default' | 'number' | 'none';
loop?: boolean;
success?: (result: any) => void;
fail?: (error: any) => void;
complete?: () => void;
}
interface GetImageInfoOptions {
src: string;
success?: (result: ImageInfoResult) => void;
fail?: (error: any) => void;
complete?: () => void;
}
interface ImageInfoResult {
width: number;
height: number;
path: string;
orientation: 'up' | 'down' | 'left' | 'right' | 'up-mirrored' | 'down-mirrored' | 'left-mirrored' | 'right-mirrored';
type: string;
}Usage Examples:
import uni from "@dcloudio/uni-app-plus";
// Choose image from camera or gallery
uni.chooseImage({
count: 3,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: (res) => {
console.log('Selected images:', res.tempFilePaths);
// Preview first image
uni.previewImage({
current: res.tempFilePaths[0],
urls: res.tempFilePaths
});
// Get image info
uni.getImageInfo({
src: res.tempFilePaths[0],
success: (info) => {
console.log('Image dimensions:', info.width, 'x', info.height);
}
});
}
});
// Compress images
uni.compressImage({
src: '/path/to/image.jpg',
quality: 80,
success: (res) => {
console.log('Compressed image:', res.tempFilePath);
console.log('Original size:', res.size);
}
});
// Save image to album
uni.saveImageToPhotosAlbum({
filePath: '/path/to/image.jpg',
success: () => {
uni.showToast({
title: 'Image saved to album',
icon: 'success'
});
}
});Record, choose, and process video files.
/**
* Choose video from camera or gallery
* @param options - Video selection options
*/
function chooseVideo(options?: ChooseVideoOptions): void;
/**
* Get video file information
* @param options - Get video info options
*/
function getVideoInfo(options: GetVideoInfoOptions): void;
/**
* Compress video to reduce file size
* @param options - Video compression options
*/
function compressVideo(options: CompressVideoOptions): void;
/**
* Save video to device photo album
* @param options - Save video options
*/
function saveVideoToPhotosAlbum(options: SaveVideoToPhotosAlbumOptions): void;
/**
* Create video context for video component control
* @param videoId - Video component ID
* @returns VideoContext instance
*/
function createVideoContext(videoId: string): VideoContext;
interface ChooseVideoOptions {
sourceType?: ('album' | 'camera')[];
compressed?: boolean;
maxDuration?: number;
camera?: 'back' | 'front';
success?: (result: ChooseVideoResult) => void;
fail?: (error: any) => void;
complete?: () => void;
}
interface ChooseVideoResult {
tempFilePath: string;
duration: number;
size: number;
height: number;
width: number;
name: string;
}
interface VideoContext {
play(): void;
pause(): void;
seek(position: number): void;
stop(): void;
sendDanmu(danmu: DanmuOptions): void;
playbackRate(rate: number): void;
requestFullScreen(options?: FullScreenOptions): void;
exitFullScreen(): void;
showStatusBar(): void;
hideStatusBar(): void;
}Comprehensive audio recording and playback capabilities.
/**
* Get audio recorder manager for recording control
* @returns RecorderManager instance
*/
function getRecorderManager(): RecorderManager;
/**
* Get background audio manager for background playback
* @returns BackgroundAudioManager instance
*/
function getBackgroundAudioManager(): BackgroundAudioManager;
/**
* Create audio context for audio component control
* @param audioId - Audio component ID
* @returns AudioContext instance
*/
function createAudioContext(audioId: string): AudioContext;
/**
* Create inner audio context for programmatic audio control
* @returns InnerAudioContext instance
*/
function createInnerAudioContext(): InnerAudioContext;
interface RecorderManager {
start(options: RecordOptions): void;
pause(): void;
resume(): void;
stop(): void;
onStart(callback: () => void): void;
onPause(callback: () => void): void;
onStop(callback: (result: RecordResult) => void): void;
onFrameRecorded(callback: (result: FrameRecordedResult) => void): void;
onError(callback: (error: RecordError) => void): void;
onInterruptionBegin(callback: () => void): void;
onInterruptionEnd(callback: () => void): void;
}
interface BackgroundAudioManager {
duration: number;
currentTime: number;
paused: boolean;
src: string;
startTime: number;
title: string;
epname: string;
singer: string;
coverImgUrl: string;
webUrl: string;
protocol: string;
play(): void;
pause(): void;
stop(): void;
seek(position: number): void;
onCanplay(callback: () => void): void;
onPlay(callback: () => void): void;
onPause(callback: () => void): void;
onStop(callback: () => void): void;
onEnded(callback: () => void): void;
onTimeUpdate(callback: () => void): void;
onError(callback: (error: any) => void): void;
}
interface InnerAudioContext {
src: string;
startTime: number;
autoplay: boolean;
loop: boolean;
obeyMuteSwitch: boolean;
volume: number;
duration: number;
currentTime: number;
paused: boolean;
buffered: number;
play(): void;
pause(): void;
stop(): void;
seek(position: number): void;
destroy(): void;
onCanplay(callback: () => void): void;
onPlay(callback: () => void): void;
onPause(callback: () => void): void;
onStop(callback: () => void): void;
onEnded(callback: () => void): void;
onTimeUpdate(callback: () => void): void;
onError(callback: (error: any) => void): void;
onWaiting(callback: () => void): void;
onSeeking(callback: () => void): void;
onSeeked(callback: () => void): void;
}Usage Examples:
// Record audio
const recorderManager = uni.getRecorderManager();
recorderManager.onStart(() => {
console.log('Recording started');
});
recorderManager.onStop((res) => {
console.log('Recording stopped:', res.tempFilePath);
console.log('Duration:', res.duration);
});
recorderManager.start({
duration: 60000,
sampleRate: 44100,
numberOfChannels: 1,
encodeBitRate: 192000,
format: 'aac'
});
// Background audio playback
const backgroundAudio = uni.getBackgroundAudioManager();
backgroundAudio.title = 'Song Title';
backgroundAudio.singer = 'Artist Name';
backgroundAudio.coverImgUrl = 'https://example.com/cover.jpg';
backgroundAudio.src = 'https://example.com/music.mp3';
backgroundAudio.onPlay(() => {
console.log('Background audio playing');
});
// Inner audio for app sounds
const innerAudio = uni.createInnerAudioContext();
innerAudio.src = '/static/sounds/notification.mp3';
innerAudio.onError((error) => {
console.error('Audio error:', error);
});
innerAudio.play();Direct camera control for custom camera interfaces.
/**
* Create camera context for camera component control
* @returns CameraContext instance
*/
function createCameraContext(): CameraContext;
interface CameraContext {
takePhoto(options: TakePhotoOptions): void;
startRecord(options: StartRecordOptions): void;
stopRecord(options?: StopRecordOptions): void;
onCameraFrame(callback: (frame: CameraFrame) => void): void;
}
interface TakePhotoOptions {
quality?: 'high' | 'normal' | 'low';
success?: (result: TakePhotoResult) => void;
fail?: (error: any) => void;
complete?: () => void;
}
interface TakePhotoResult {
tempImagePath: string;
}Choose various file types from device storage.
/**
* Choose file from device storage
* @param options - File selection options
*/
function chooseFile(options?: ChooseFileOptions): void;
interface ChooseFileOptions {
count?: number;
type?: 'all' | 'video' | 'image';
extension?: string[];
success?: (result: ChooseFileResult) => void;
fail?: (error: any) => void;
complete?: () => void;
}
interface ChooseFileResult {
tempFilePaths: string[];
tempFiles: FileInfo[];
}
interface FileInfo {
path: string;
size: number;
name: string;
type: string;
}interface CompressImageOptions {
src: string;
quality?: number; // 0-100
width?: number;
height?: number;
compressedWidth?: number;
compressedHeight?: number;
rotate?: number;
success?: (result: CompressImageResult) => void;
fail?: (error: any) => void;
complete?: () => void;
}
interface CompressImageResult {
tempFilePath: string;
size: number;
}
interface SaveImageToPhotosAlbumOptions {
filePath: string;
success?: (result: any) => void;
fail?: (error: any) => void;
complete?: () => void;
}
interface RecordOptions {
duration?: number;
sampleRate?: number;
numberOfChannels?: number;
encodeBitRate?: number;
format?: 'aac' | 'mp3';
frameSize?: number;
audioSource?: 'auto' | 'buildInMic' | 'headsetMic' | 'mic' | 'camcorder' | 'voice_communication' | 'voice_recognition';
}
interface RecordResult {
tempFilePath: string;
duration: number;
fileSize: number;
}
interface DanmuOptions {
text: string;
color?: string;
time?: number;
}
interface FullScreenOptions {
direction?: 0 | 90 | -90;
}