Ionic 相册、相机调用

首先安装依赖:

1.相机依赖

ionic cordova plugin add cordova-plugin-camera

npm install --save @ionic-native/camera

2.相册依赖

ionic cordova plugin add cordova-plugin-telerik-imagepicker

npm install @ionic-native/image-picker

官网都有现成的依赖,一定注意版本问题!比如你在维护的ionic3版本的项目,但是你本地环境是4以上的,请注意

npm install --save @ionic-native/camera   和 npm install @ionic-native/image-picker   后面都要跟着@环境版本。

比如我在维护3 的项目,但是环境是4 那么  

npm install @ionic-native/image-picker@4 

npm install --save @ionic-native/camera@4

引用依赖

app.module.ts

在app.module.ts中引用以上依赖:

import {Camera} from "@ionic-native/camera";

import { ImagePicker } from '@ionic-native/image-picker';

@NgModule({

  declarations: [

    MyApp,

    HomePage

  ],

  imports: [

    BrowserModule,

    IonicModule.forRoot(MyApp)

  ],

  bootstrap: [IonicApp],

  entryComponents: [

    MyApp,

    HomePage

  ],

  providers: [

    StatusBar,

    SplashScreen,

    {provide: ErrorHandler, useClass: IonicErrorHandler},

    Transfer,

    File,

    Camera,

    ImagePicker,

    FileTransfer,

    HttpProvider

  ]

})

export class AppModule {}

在所在页面进行使用

1.引用 

home.ts

import { Component } from '@angular/core';

import { NavController, ActionSheetController,Platform} from 'ionic-angular';

import { Transfer, FileUploadOptions, TransferObject } from '@ionic-native/transfer';

import { CameraOptions, Camera } from '@ionic-native/camera';

import { ImagePicker,ImagePickerOptions } from '@ionic-native/image-picker';

@Component({

  selector: 'page-home',

  templateUrl: 'home.html'

})

export class HomePage {

  path:any = "";

  fileTransfer: TransferObject = this.transfer.create();

  constructor(public navCtrl: NavController,

              private platform: Platform,

              private transfer: Transfer,

              private camera:Camera,

              private imagePicker : ImagePicker,

              private actionSheetCtrl: ActionSheetController

              ) {

  }

  presentActionSheet() {

    let actionSheet = this.actionSheetCtrl.create({

      buttons: [{

        text: '拍照',

        role: 'openCamera',

        handler: () => {

          this.openCamera();

        }

      }, {

        text: '从相册选择',

        role: 'chooseFromAlbum',

        handler: () => {

          this.getViewByImagePicker();

        }

      }, {

        text: '取消',

        role: 'cancel',

        handler: () => {

          console.log("cancel");

        }

      }]

    });

    actionSheet.present().then(value => {

      return value;

    });

  }

//获取相册

  getViewByImagePicker(){

    //获取权限

    //  this.imagePicker.hasReadPermission().then(result=>{

    //  if(!result){

    //      this.imagePicker.requestReadPermission().then(result=>{

    //        console.log("读取权限:"+result)

    //      });

    //  }

    // });

    /**

  * 调取相册 获取图片

  */

    const options : ImagePickerOptions={

              maximumImagesCount:9,

              outputType : 1

            };//只选择9张图片

            this.imagePicker.getPictures(options).then((results) => {

              this.path = "data:image/jpeg;base64,"+results;

            }, (err) => {


      });

  }

openCamera() {

    const options: CameraOptions = {

      quality: 90,                                                  // 相片质量 0 -100

      destinationType: this.camera.DestinationType.DATA_URL,        // DATA_URL 是 base64  FILE_URL 是文件路径

      encodingType: this.camera.EncodingType.JPEG,

      mediaType: this.camera.MediaType.PICTURE,

      saveToPhotoAlbum: true,                                      // 是否保存到相册

      // sourceType: this.camera.PictureSourceType.CAMERA ,        //是打开相机拍照还是打开相册选择  PHOTOLIBRARY : 相册选择, CAMERA : 拍照,

    }

    this.camera.getPicture(options).then((imageData) => {

      console.log("成功获取照片"+imageData);

      // if(this.isIos()){

      //  imageData = imageData.replace(/^file:\/\//, '');

      //  }

      //console.log("成功获取照片"+imageData);

      this.path = "data:image/jpeg;base64,"+imageData;// imageData;

    }, (err) => {

      // Handle error

    });

  }

}

home.ts中获取图片数据,需要注意,在写CameraOptions 时,destinationType 要选用DATA_URL,其他数据无法在html上直接显示。如下(相册同理)


CameraOptions

在数据返回时 将数据前缀加上一串:

data:image/jpeg;base64,

将得到组织好的数据赋予path

3.html中例子代码:

<ion-header>

  <ion-navbar>

    <ion-title>编辑</ion-title>

  </ion-navbar>

</ion-header>

<ion-content>

  <div padding-top>

    <button ion-button block color="light" (click)="presentActionSheet()">选择照片</button>

  </div>

  <!-- <div padding-top>

    <button ion-button (click)="onTest()">上传视频</button>

  </div>

  <div padding-top>

    <button ion-button (click)="onTest()">上传文件</button>

  </div> -->

<ion-img [src]="path" style="width: 220px;height:220px"></ion-img>

  <div padding-top>

    <button type="button" ion-button block>保 存</button>

  </div>

</ion-content>

真机测试

1.打包问题

我用的是iphone进行测试,并且Xcode 版本为10以上的请注意:因为暂时ionic不支持10及其以上的打包,所以

ionic cordova build ios -- --buildFlag="-UseModernBuildSystem=0"


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容