6

デフォルトでは、ターゲットが設定されている場合、react-native-cameraは電話の標準アスペクト比で写真を撮り、Base64 pngで出力します。Camera.constants.CaptureTarget.memory

正方形の写真を作成する方法を探しています-カメラを直接使用するか、キャプチャしたimagedata. そのようなことが React Native で可能かどうかはわかりません。または、代わりに完全にネイティブ コードを使用する必要があります。

aspectプロップは、ビューファインダーでのカメラ画像の表示方法のみを変更します。

これが私のコードです:

<Camera
  ref={(cam) => {
    this.cam = cam;
  }}
  captureAudio={false}
  captureTarget={Camera.constants.CaptureTarget.memory}
  aspect={Camera.constants.Aspect.fill}>
</Camera>;

async takePicture() {
  var imagedata;
  try {
    var imagedata = await this.cam.capture();// Base64 png, not square
  } catch (err) {
    throw err;
  }
  return imagedata;
}
4

1 に答える 1

5

Image で getSize メソッドを使用し、データを ImageEditor の cropImage メソッドに渡します。

cropData オブジェクトを見ると、画像の幅を幅と高さの両方の値として渡し、完全な正方形の画像を作成していることがわかります。

画像の上部ではなく中央がトリミングされるように、Y 軸をオフセットする必要があります。高さを半分に分割し、その数値から画像のサイズの半分 ((h/2) - (w/2)) を引くと、常に画像の中心から切り取ることができます。使用しているデバイス。

Image.getSize(originalImage, (w, h) => {
  const cropData = {
    offset: {
      x: 0,
      y: h / 2 - w / 2,
    },
    size: {
      width: w,
      height: w,
    },
  };
  ImageEditor.cropImage(
    originalImage,
    cropData,
    successURI => {
      // successURI contains your newly cropped image
    },
    error => {
      console.log(error);
    },
  );
});

于 2017-03-04T01:28:43.780 に答える