简体   繁体   English

我如何将图像传递给功能离子2

[英]How do i pass image to a function Ionic 2

i get the image from the service class via this code 我通过此代码从服务类获取图像

 this.cameraService.getImage(this.width, this.height, this.quality).subscribe(data => this.image = data, error =>

I would want to pass this code to one of the getVision() function so that i am able to use the Google API.May i know how do i do it? 我想将此代码传递给getVision()函数之一,以便能够使用Google API。请问我该怎么做? I tried declaring a string variable and try to put the above code inside the variable however it does not work.Below are the codes 我尝试声明一个字符串变量,然后尝试将上面的代码放入该变量中,但是它不起作用。以下是这些代码

Camera.TS class

    export class CameraPage {



  width: number;
  height: number;
  cropper: Cropper;*/

  image:string;
  width:number = 500;
  height:number = 500;
  quality:number = 90;
  picture:string;

  labels: Array<any> = [];
  //translation
  scanning: Array<any> = [];
  choseLang: boolean = false;
  loading: boolean = false;


  constructor(public navCtrl: NavController, public navParams: NavParams,public testService: TestService,public cameraService: CameraService,public toastCtrl: ToastController) {

  }


  addPhoto(){ //take picture & return image ***
    this.cameraService.getImage(this.width, this.height, this.quality).subscribe(data => this.image = data, error =>
    {
       this.getVision(this.image);

      // Toast errot and return DEFAULT_PHOTO from Constants
      this.toast(error);


    });



  }

  toast(message: string) {
    let toast = this.toastCtrl.create({
      message: message,
      duration: 2500,
      showCloseButton: false
    });
    toast.present();
  }


  getVision(image64:string) {



  this.testService.getVisionLabels(image64:string)
    .subscribe((sub) => {

      this.labels = sub.responses[0].textAnnotations;


      this.getText();

    });

}



getText() {

  this.labels.forEach((label) => {
    let translation = {search: label.description, result: ''};

    console.log(label.description);

  });
}

}

camera service class 相机服务等级

  export class CameraService {
  public base64Image: string;






  constructor(public platform: Platform, public alertCtrl: AlertController, public modalCtrl: ModalController, private http: Http) {

  }



  getImage(width: number, height: number, quality: number) {
    return Observable.create(observer => {
      //Set default options for taking an image with the camera
      let imageOptions: any = {
        quality: quality,
        destinationType: Camera.DestinationType.DATA_URL,
        sourceType: Camera.PictureSourceType.CAMERA,
        encodingType: Camera.EncodingType.JPEG,
        correctOrientation: 1,
        saveToPhotoAlbum: false,
        mediaType: Camera.MediaType.PICTURE,
        cameraDirection: 1
      };

      let selectAlert = this.alertCtrl.create({
        title: 'Let\'s add a picture!',
        message: "Select how you would like to add the picture",
        enableBackdropDismiss: false,
        buttons: [{
          text: 'Albums',
          handler: data => {
            //Change sourceType to PHOTOLIBRARY
            imageOptions.sourceType = Camera.PictureSourceType.PHOTOLIBRARY;
            selectAlert.dismiss();
          }
        }, {
          text: 'Camera',
          handler: data => {
            selectAlert.dismiss();
          }
        }]
      });

      selectAlert.onDidDismiss(() => {
        this.getCameraImage(imageOptions).subscribe(image => {   //image options are either album or camera**

            let cropModal = this.modalCtrl.create(ScannerPage, { "imageBase64": image, "width": 500, "height": 500 });
            cropModal.onDidDismiss((croppedImage: any) => {
              if (!croppedImage)
                observer.error("Canceled while cropping.")
              else {
                observer.next(croppedImage);
                observer.complete();

              }
            });
            cropModal.present();


        }, error => observer.error(error));
      });
      selectAlert.present();
    });
  }



  getCameraImage(options: any) { //get base64 image
    return Observable.create(observer => {
      this.platform.ready().then(() => {
        Camera.getPicture(options).then((imageData: any) => {
          // imageData is a base64 encoded string as per options set above
          let base64Image: string = "data:image/jpeg;base64," + imageData;
          observer.next(base64Image);
          observer.complete();
        }, error => {
          observer.error(error);
        });
      });
    });
  }
}

You need to understand that the data returned by an Observable service can be accessed in .subscribe() callback 1 and not in callback 2. Read this for more clarification. 您需要了解,可以在.subscribe()回调1中而不是在回调2中访问Observable服务返回的数据。请阅读此内容以获取更多说明。

this.cameraService.getImage(this.width,this.height,this.quality)
  .subscribe( (data) => {
    this.image = data;
    this.getVision(this.image);
  },(error) => {
     // Toast errot and return DEFAULT_PHOTO from Constants
     this.toast(error);
  }
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM