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 回答