采取方形照片与反应原生相机

时间:2017-01-11 15:24:27

标签: ios camera react-native base64 react-native-camera

默认情况下,如果设置了react-native-camera目标,Camera.constants.CaptureTarget.memory会以手机的标准宽高比拍摄照片并以 Base64 png 输出。

我正在寻找一种方法来创建方形照片 - 直接使用相机或转换捕获的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;
}

1 个答案:

答案 0 :(得分:2)

在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);
  })
})