react-native-image-crop-picker

前言:为了满足app上传头像的需求,要从相册里取出一张图片然后进行裁剪,最后上传。

一、安装

yarn add react-native-image-crop-picker

运行项目时,检查一下/android/build.gradle 文件,查看gradle版本,如果运行报错:nexpected element <queries> found in <manifest>,就要升级gradle

dependencies {
        //3.5.3是不行的可以一直升级到4.2.2  ,之后用Android studio重新下载gradle依赖
        classpath("com.android.tools.build:gradle:4.2.2")
}

二、选择一张图片,进行裁剪

import React from "react";
import { View, Text, PermissionsAndroid, Button } from 'react-native';
import ImagePicker from 'react-native-image-crop-picker';

class CropPicker extends React.Component {
    constructor(props) {
        super(props);
        this.state = {

        }
    }
    render() {
        return (
            <View>
                <Text style={{ padding: 20, backgroundColor: 'pink' }} onPress={this.selectImage}>点击按钮进入相册</Text>
            </View>
        );
    }
    selectImage = () => {
       ImagePicker.openPicker({
                width: 300,
                height: 400,
                cropping: true,
            }).then(image => {
                console.log(image);
            }).catch(err => {
                    console.log("没有选择照片");
            })
    }
}

export default CropPicker;

进入后:第一张选择图片,第二张是裁剪图片

             

确实选择图片的时候,很丑,没法像微信或者qq那样直接进入相机胶卷,剩下获取到图片文件对象,你用Image组件怎么显示随你

三、拍照(方法是ImagePicker.openCamera)

这个需要权限申请权限

1. 在Android的AndroidManifest.xml 添加权限申请,不然无法,无法弹出权限询问框

<!-- 请求访问相机 -->
<uses-permission android:name="android.permission.CAMERA"/>

2. 权限验证

参考react native 官网 PermissionsAndroid 

在上面的代码基础上,添加如下


<Button title="请求拍照" onPress={requestCameraPermission} />


//这个放在组件函数外面,作为一个单独函数
const requestCameraPermission = async () => {
    try {
        const granted = await PermissionsAndroid.request(
            PermissionsAndroid.PERMISSIONS.CAMERA,
            {
                title: "Cool Photo App Camera Permission",
                message:
                    "Cool Photo App needs access to your camera " +
                    "so you can take awesome pictures.",
                buttonNeutral: "Ask Me Later",
                buttonNegative: "Cancel",
                buttonPositive: "OK"
            }
        );
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
            ImagePicker.openCamera({
                width: 300,
                height: 400,
                cropping: true,
            }).then(image => {
                console.log(image);
            }).catch(err => {
                    console.log("没有拍照");
            })
        } else {
            console.log("Camera permission denied");
        }
    } catch (err) {
        console.warn(err);
    }
};

未来的努力方向:选择图片的时候,像微信或者qq那样直接进入相机胶卷

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tengyuxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值