import { Injectable } from '@angular/core'; import { Platform, ActionSheetController } from 'ionic-angular' import { Camera as NativeCamera } from '@ionic-native/camera'; import { File } from '@ionic-native/file'; import { CameraOptions } from './camera.type'; import { BaseLog as Log } from 'base-log'; const log = new Log('Camera'); @Injectable() export class Camera{ constructor( public platform: Platform, public actionSheetCtrl:ActionSheetController, public nativeCamera:NativeCamera, public file:File ){ } defaultOptions:CameraOptions = { targetWidth: 750, quality: 80, // 质量默认为100 encodingType: 0,// 图片类型默认为JPEG,1为PNG destinationType: 0 // 返回数据类型默认0为base64-encoded,1为file URI,2为native URI } cleanup = () => { if(!this.platform.is('cordova')) return; return this.nativeCamera.cleanup(); } // 打开相册 album = (options?: CameraOptions):Promise => { if(!this.platform.is('cordova')) return Promise.resolve(); options = Object.assign({}, this.defaultOptions, options); options.sourceType = 0; log.info('options',options,2); return this.nativeCamera.getPicture(options).then((imageData)=>{ imageData = this.filterImageData(imageData,options); return Promise.resolve(imageData); },(err)=>{ log.info('err',err,2); }); } // 打开相机,默认定义相机的长宽 photo = (width?, height?):Promise => { if(!this.platform.is('cordova')) return Promise.resolve(); let options:CameraOptions; if(typeof width == 'object'){ options = Object.assign({}, this.defaultOptions, width); }else{ options = this.defaultOptions; options.targetWidth = width || 200; options.targetHeight = height || 200; } log.info('options',options,2); return this.nativeCamera.getPicture(options).then((imageData)=>{ imageData = this.filterImageData(imageData,options); return Promise.resolve(imageData); },(err)=>{ log.info('err',err,2); }); } // 处理图片数据 filterImageData = (imageData,options) => { if(options.destinationType == 0){ // base64 imageData = 'data:image/'+ (options.encodingType == 0 ? 'jpeg' : 'png') + ';base64,' + imageData; return imageData; }else{ return imageData } } }