2016-09-13 13 views
0

キャプチャした画像の取得方法をreact-native-cameraキャプチャ方法を使用して確認できません。React-Native-Cameraキャプチャを使用してメタデータを取得するにはどうすればよいですか?

私はそれはのようなものだと仮定した。

this.camera.capture({metadata: true}) 
    .then((data) => console.log(data)) 
    .catch(error => alert("error: " + error)); 

しかし、それは唯一のパスを返し、そうする:

this.camera.capture({metadata: 'location'}) 
    .then((data) => console.log(data)) 
    .catch(error => alert("error: " + error)); 

ドキュメントのメタデータの使用量が私には不明です。 メタデータパラメータを渡す正しい方法は何ですか? 誰かがこれを動作させましたか?

答えて

0

これは、暗闇の中でショットかもしれないが、あなたはREADME.md https://github.com/lwansbrough/react-native-cameraの最初の段落を読めば、それは言う:

これらのドキュメントは、進捗v1のリリースで作業するためのものです。あなたが最新かつ最高のものを使いたいが、重大な不安定さに対処できるなら、npm install --save lwansbrough/react-native-cameraでインストールすることができます。

ライブラリのNPMバージョンは0.3.8:https://www.npmjs.com/package/react-native-cameraです。

EDIT

だから私は0.3.8でライブラリをインストールするために行って、(あなたは、Androidの携帯電話上でこれをテストしていると仮定して)Javaコードを見てnode_modulesに行き、ネイティブで検索captureの機能であり、文字通りmetadataオプションを処理するものはありません。これは悲しいことです。 metadataをもう一度検索してください、あなたはそれのために何かを見つけることができません。

@ReactMethod 
public void capture(final ReadableMap options, final Promise promise) { 
    int orientation = options.hasKey("orientation") ? options.getInt("orientation") : RCTCamera.getInstance().getOrientation(); 
    if (orientation == RCT_CAMERA_ORIENTATION_AUTO) { 
     _sensorOrientationChecker.onResume(); 
     _sensorOrientationChecker.registerOrientationListener(new RCTSensorOrientationListener() { 
      @Override 
      public void orientationEvent() { 
       int deviceOrientation = _sensorOrientationChecker.getOrientation(); 
       _sensorOrientationChecker.unregisterOrientationListener(); 
       _sensorOrientationChecker.onPause(); 
       captureWithOrientation(options, promise, deviceOrientation); 
      } 
     }); 
    } else { 
     captureWithOrientation(options, promise, orientation); 
    } 
} 

private void captureWithOrientation(final ReadableMap options, final Promise promise, int deviceOrientation) { 
    Camera camera = RCTCamera.getInstance().acquireCameraInstance(options.getInt("type")); 
    if (null == camera) { 
     promise.reject("No camera found."); 
     return; 
    } 

    if (options.getInt("mode") == RCT_CAMERA_CAPTURE_MODE_VIDEO) { 
     record(options, promise); 
     return; 
    } 

    RCTCamera.getInstance().setCaptureQuality(options.getInt("type"), options.getString("quality")); 

    if (options.hasKey("playSoundOnCapture") && options.getBoolean("playSoundOnCapture")) { 
     MediaActionSound sound = new MediaActionSound(); 
     sound.play(MediaActionSound.SHUTTER_CLICK); 
    } 

    if (options.hasKey("quality")) { 
     RCTCamera.getInstance().setCaptureQuality(options.getInt("type"), options.getString("quality")); 
    } 

    final Boolean shouldMirror = options.hasKey("mirrorImage") && options.getBoolean("mirrorImage"); 

    RCTCamera.getInstance().adjustCameraRotationToDeviceOrientation(options.getInt("type"), deviceOrientation); 
    camera.takePicture(null, null, new Camera.PictureCallback() { 
     @Override 
     public void onPictureTaken(byte[] data, Camera camera) { 

      if (shouldMirror) { 
       data = mirrorImage(data); 
       if (data == null) { 
        promise.reject("Error mirroring image"); 
       } 
      } 

      camera.stopPreview(); 
      camera.startPreview(); 
      WritableMap response = new WritableNativeMap(); 
      switch (options.getInt("target")) { 
       case RCT_CAMERA_CAPTURE_TARGET_MEMORY: 
        String encoded = Base64.encodeToString(data, Base64.DEFAULT); 
        response.putString("data", encoded); 
        promise.resolve(response); 
        break; 
       case RCT_CAMERA_CAPTURE_TARGET_CAMERA_ROLL: { 
        File cameraRollFile = getOutputCameraRollFile(MEDIA_TYPE_IMAGE); 
        if (cameraRollFile == null) { 
         promise.reject("Error creating media file."); 
         return; 
        } 

        Throwable error = writeDataToFile(data, cameraRollFile); 
        if (error != null) { 
         promise.reject(error); 
         return; 
        } 

        addToMediaStore(cameraRollFile.getAbsolutePath()); 
        response.putString("path", Uri.fromFile(cameraRollFile).toString()); 
        promise.resolve(response); 
        break; 
       } 
       case RCT_CAMERA_CAPTURE_TARGET_DISK: { 
        File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); 
        if (pictureFile == null) { 
         promise.reject("Error creating media file."); 
         return; 
        } 

        Throwable error = writeDataToFile(data, pictureFile); 
        if (error != null) { 
         promise.reject(error); 
         return; 
        } 

        addToMediaStore(pictureFile.getAbsolutePath()); 
        response.putString("path", Uri.fromFile(pictureFile).toString()); 
        promise.resolve(response); 
        break; 
       } 
       case RCT_CAMERA_CAPTURE_TARGET_TEMP: { 
        File tempFile = getTempMediaFile(MEDIA_TYPE_IMAGE); 
        if (tempFile == null) { 
         promise.reject("Error creating media file."); 
         return; 
        } 

        Throwable error = writeDataToFile(data, tempFile); 
        if (error != null) { 
         promise.reject(error); 
        } 

        response.putString("path", Uri.fromFile(tempFile).toString()); 
        promise.resolve(response); 
        break; 
       } 
      } 
     } 
    }); 
} 

しかし、私はiOSの側で見て、彼らはそこにmetadataオブジェクトを処理しないことがわかります。

EDIT

また、masterブランチはまだmetadataオプションを処理しません。 hereを参照してください。特定のtargetを指定する必要があり、それが何であるかによって特定のデータ型が返されますが、残念なことに場所に関係するものはありません。

+0

私は現在0.3.8のバージョンを使用しています。私は、メタデータオプションが[古いバージョンのドキュメント](https://github.com/lwansbrough/react-native-camera/tree/8cc61edef2c018b81e1c52f13c7d261fe6a35a63)にも表示されていることに気づいたので、正しく理解すれば、バージョンは問題 – efratyo

+0

@efratyo私は答えを更新しました。 – rclai

+0

確かに参考になりました。どうもありがとうございました! – efratyo

関連する問題