Экспо - аспект ImagePicker на iOS не работает. Только квадрат - PullRequest
0 голосов
/ 07 мая 2018

Компонент imagePicker хорошо работает как на iOS, так и на Android.

Соотношение сторон отлично работает на Android, но не работает на iOS. Я использую create-реагировать-нативное приложение, и я не хочу извлекать и использовать другой пакет.

Мне нужно создать три варианта обрезки - Пейзаж, Квадрат и Портрет. Прямо сейчас я могу получить только квадратные изображения.

Я получаю квадратные размеры для ширины и высоты при съемке изображения с камеры, но получаю исходные размеры изображения при выборе из галереи.

Я использую образец кода. Дайте мне знать, что можно сделать, чтобы исправить это, пожалуйста, или другой пакет, который я мог бы использовать, чтобы добиться этого без извлечения. Большое спасибо.

import React, { Component } from 'react';
import { Button, Text, ScrollView, StyleSheet } from 'react-native';
import { ImagePicker, Permissions, Constants } from 'expo';

export default class App extends Component {
state = {
result: null,
};

askPermissionsAsync = async () => {
    await Permissions.askAsync(Permissions.CAMERA);
    await Permissions.askAsync(Permissions.CAMERA_ROLL);
    // you would probably do something to verify that permissions
    // are actually granted, but I'm skipping that for brevity
};

useLibraryHandler = async () => {
    await this.askPermissionsAsync();
    let result = await ImagePicker.launchImageLibraryAsync({
        allowsEditing: true,
        aspect: [12, 3],
        base64: false,
    });
    console.log(result.width, result.height, "result");
    this.setState({ result });
};

useCameraHandler = async () => {
    await this.askPermissionsAsync();
    let result = await ImagePicker.launchCameraAsync({
        allowsEditing: true,
        aspect: [12, 3],
        base64: false,
    });
    console.log(result.width, result.height, "result");
    this.setState({ result });
};

render() {
    return (
        <ScrollView style={{flex: 1}} contentContainerStyle={styles.container}>
            <Button title="launchCameraAsync" onPress={this.useCameraHandler} />
            <Button
                title="launchImageLibraryAsync"
                onPress={this.useLibraryHandler}
            />
            <Text style={styles.paragraph}>
                {JSON.stringify(this.state.result)}
            </Text>
        </ScrollView>
    );
}
}

1 Ответ

0 голосов
/ 08 мая 2018

Вам будет возвращено только квадратное изображение в IOS

Как уже упоминалось в экспозиции документы .

аспект (массив) - Массив с двумя записями [x, y], указывающий соотношение сторон для сохранения, если пользователю разрешено редактировать изображение (путем передачи allowsEditing: true).

Это применимо только на Android , поскольку на iOS прямоугольник кадрирования всегда равен квадрат .

Поэтому вам необходимо вручную изменить размер изображения с помощью реагировать-родной-resizer или любых других альтернативных пакетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...