React Native:在Android上裁剪图像



以下函数适用于 iOS,但不适用于 Android。我想在两个平台上实现相同的结果。

根据此官方文档,原因是Android软件包中缺少react-native ImageStore

import {
  ImageEditor,
  ImageStore
} from 'react-native';

Android react-native中裁剪图像(为正方形(的替代方法是什么?

cropImage(base64ImageData) {
    return new Promise((resolve, reject)=>{
      ImageStore.addImageFromBase64(
        base64ImageData,
        (photoURI)=>{
          ImageEditor.cropImage(
            photoURI,
            {offset:{x:0,y:(1920-1080)/2},size:{width:1080, height:1080}},
            (croppedURI)=>{
              ImageStore.getBase64ForTag(
                croppedURI,
                (base64CroppedData)=>{
                  ImageStore.removeImageForTag(croppedURI);
                  resolve(base64CroppedData);
                },
                (err)=>{
                  reject(err);
                }
              );
              ImageStore.removeImageForTag(photoURI);
            },
            (err)=>{
              reject(err);
            }
          );
        },
        (err)=>{
          reject(err);
        }
      );
    });
  }

更新:

有一个项目https://github.com/seancunningham/react-native-image-store-ext(上次提交时间为 2016 年 10 月 28 日(,但它仅实现:

  • 布尔值删除图像标记(字符串 file_uri(

其余的都丢失了:

  • static addImageFromBase64(base64ImageData, success, failure(

我的初步解决方案:

  private static final String IMAGE_STORAGE_URL_SCHEME = "rct-image-store";
  @ReactMethod
  public void addImageFromBase64(String base64_image_data, Callback successCallback, Callback failureCallback){
    String imageStorageDir = this.reactContext.getApplicationContext().getFilesDir()+"/"+IMAGE_STORAGE_URL_SCHEME+"/";
    byte[] buffer = new byte[BUFFER_SIZE];
    String file_uri = imageStorageDir+"1";
    try {
      File f = new File(imageStorageDir);
      if(!f.exists()) {
        f.mkdir();
      }
      FileOutputStream fos = new FileOutputStream(file_uri, false);
      byte[] decodedImage = Base64.decode(base64_image_data, Base64.DEFAULT);
      fos.write(decodedImage);
      fos.close();
      successCallback.invoke("file://"+file_uri);
    } catch (IOException ioe) {
      failureCallback.invoke("Failed to add image from base64String"+ioe.getMessage());
    } catch (Exception e) {
      failureCallback.invoke("Failed to add image from base64String"+e.getMessage());
    }
  }
  • static getBase64ForTag(uri, success, failure(

在此文件中实现 ImageStorageManager.java

  • static hasImageForTag(uri, callback(

问题必须是偏移量 + 大小的总和大于接受的高度,请尝试一下:

{offset:{x:0,y:(1920-1080)/2},size:{width:1080, height:1080 - (1920-1080)/2)}},

看看它是否有效,如果有效,请尝试调整您的 size.height 大小,看看什么适合您! :)

相关内容

  • 没有找到相关文章

最新更新