- vừa được xem lúc

Hướng dẫn áp dụng Instagram filter photo trong React Native

0 0 25

Người đăng: Ha Anh Duc

Theo Viblo Asia

Chào mọi người, bài viết này mình sẽ giới thiệu đến mọi người cách sử dụng Instagram filter cho 1 ảnh trong project React Native nhé.

Trước tiên chúng ta cần có 1 project React Native cơ bản và tất nhiên là project sẽ bao gồm cả một bức ảnh mẫu để làm demo nhé. Trong ví dụ này mình sự dụng ảnh mẫu có tên là car.png.

Và package để sử dụng các filter đó là react-native-image-filter-kit

npm install -s react-native-image-filter-kit

Trong file App.js import ảnh mẫu như sau

import React from 'react';
import {Image, SafeAreaView} from 'react-native';
import {Emboss} from 'react-native-image-filter-kit';
const App = () => ( <> <SafeAreaView /> <Image style={styles.image} source={require('./car.png')} resizeMode={'contain'} /> <Emboss image={ <Image style={styles.image} source={require('./car.png')} resizeMode={'contain'} /> } /> </>
);
const styles = { image: { width: 320, height: 320, marginVertical: 10, alignSelf: 'center', },
};

Component Emposs được cung cấp bởi thư viện react-native-image-filter-kit sẽ nhận Image như một prop và trả ra một bức ảnh mới kèm filter.

Tuy nhiên thư viện còn cung cấp rất nhiều các filter khác nữa, nên để view được các filter đó trông như thế nào thì chúng ta sẽ xử lý khác đi một chút. Chúng ta sẽ import một loạt các component và define chúng thành một mảng filter như sau:

import { AdenCompat, _1977Compat, BrannanCompat, BrooklynCompat, ClarendonCompat, EarlybirdCompat, GinghamCompat, HudsonCompat, InkwellCompat, KelvinCompat, LarkCompat, LofiCompat, MavenCompat, MayfairCompat, MoonCompat, NashvilleCompat, PerpetuaCompat, ReyesCompat, RiseCompat, SlumberCompat, StinsonCompat, ToasterCompat, ValenciaCompat, WaldenCompat, WillowCompat, Xpro2Compat,
} from 'react-native-image-filter-kit'; const FILTERS = [ { title: 'Normal', filterComponent: AdenCompat, }, { title: 'Maven', filterComponent: MavenCompat, }, { title: 'Mayfair', filterComponent: MayfairCompat, }, { title: 'Moon', filterComponent: MoonCompat, }, { title: 'Nashville', filterComponent: NashvilleCompat, }, { title: 'Perpetua', filterComponent: PerpetuaCompat, }, { title: 'Reyes', filterComponent: ReyesCompat, }, { title: 'Rise', filterComponent: RiseCompat, }, { title: 'Slumber', filterComponent: SlumberCompat, }, { title: 'Stinson', filterComponent: StinsonCompat, }, { title: 'Brooklyn', filterComponent: BrooklynCompat, }, { title: 'Earlybird', filterComponent: EarlybirdCompat, }, { title: 'Clarendon', filterComponent: ClarendonCompat, }, { title: 'Gingham', filterComponent: GinghamCompat, }, { title: 'Hudson', filterComponent: HudsonCompat, }, { title: 'Inkwell', filterComponent: InkwellCompat, }, { title: 'Kelvin', filterComponent: KelvinCompat, }, { title: 'Lark', filterComponent: LarkCompat, }, { title: 'Lofi', filterComponent: LofiCompat, }, { title: 'Toaster', filterComponent: ToasterCompat, }, { title: 'Valencia', filterComponent: ValenciaCompat, }, { title: 'Walden', filterComponent: WaldenCompat, }, { title: 'Willow', filterComponent: WillowCompat, }, { title: 'Xpro2', filterComponent: Xpro2Compat, }, { title: 'Aden', filterComponent: AdenCompat, }, { title: '_1977', filterComponent: _1977Compat, }, { title: 'Brannan', filterComponent: BrannanCompat, },
];

Tiếp theo chúng ta cần render một list các filter nằm dưới bức ảnh mặc định ban đầu và căn giữa khi filter được chọn. Trong App.js:

import React, {useRef, useState} from 'react';
import { FlatList, Image, SafeAreaView, StyleSheet, Text, TouchableOpacity,
} from 'react-native';
const App = () => { const extractedUri = useRef('https://www.hyundai.com/content/hyundai/ww/data/news/data/2021/0000016609/image/newsroom-0112-photo-1-2021elantranline-1120x745.jpg'); const [selectedFilterIndex, setIndex] = useState(0); const onExtractImage = ({nativeEvent}) => { extractedUri.current = nativeEvent.uri; }; const onSelectFilter = selectedIndex => { setIndex(selectedIndex); }; const renderFilterComponent = ({item, index}) => { const FilterComponent = item.filterComponent; const image = ( <Image style={styles.filterSelector} source={require('./car.jpg')} resizeMode={'contain'} /> ); return ( <TouchableOpacity onPress={() => onSelectFilter(index)}> <Text style={styles.filterTitle}>{item.title}</Text> <FilterComponent image={image} /> </TouchableOpacity> ); }; const SelectedFilterComponent = FILTERS[selectedFilterIndex].filterComponent; return ( <> <SafeAreaView /> {selectedFilterIndex === 0 ? ( <Image style={styles.image} source={require('./car.jpg')} resizeMode={'contain'} /> ) : ( <SelectedFilterComponent onExtractImage={onExtractImage} extractImageEnabled={true} image={ <Image style={styles.image} source={require('./car.jpg')} resizeMode={'contain'} /> } /> )} <FlatList data={FILTERS} keyExtractor={item => item.title} horizontal={true} renderItem={renderFilterComponent} /> </> );
};
const styles = StyleSheet.create({ image: { width: 520, height: 520, marginVertical: 10, alignSelf: 'center', }, filterSelector: { width: 100, height: 100, margin: 5, }, filterTitle: { fontSize: 12, textAlign: 'center', },
});

Nó sẽ như ảnh sau

Sau khi chọn, thì method onExtractImage sẽ lưu URL ảnh được trích xuất sau khi đã apply filter bởi biến extractedUri ref, cái mà bạn có thể dùng để lưu trên server.

Trên đây là một ví dụ nhỏ về sử dụng filter react-native-image-filter-kit, hi vọng nó có ích cho mọi người.

Cảm ơn vì đã đọc bài viết!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học React Native từ cơ bản đến nâng cao - Phần 1 Hướng dẫn cài đặt và chạy "Hello world" (tài liệu viết từ 2018 nên giờ không còn phù hợp với version mới của react native hiện nay )

Trong bài viết này tôi sẽ hướng dẫn cài đặt React Native trên môi trường Windows (khá phổ biến ở Việt Nam). Cài đặt môi trường. Bạn cần phải có :. .

0 0 43

- vừa được xem lúc

Làm ứng dụng học toán đơn giản với React Native - Phần 6

Chào các bạn một năm mới an khang thịnh vượng, dồi dào sức khỏe. Lại là mình đây Đây là link app mà các bạn đang theo dõi :3 https://play.google.com/store/apps/details?id=com.

0 0 68

- vừa được xem lúc

Formik vs React Hook Form (Phần 1)

Các lập trình viên Front End đều làm việc rất nhiều với form cùng sự phức tạp của ứng dụng. Do vậy chúng ta cần những thư viện form mạnh mẽ hỗ trợ quản lý các form state, form validation... Thành phần module. Formik bao gồm có 9 dependencies khác. . React Hook Form thì không có.

0 0 371

- vừa được xem lúc

Làm ứng dụng học toán đơn giản với React Native - Phần 5

Chào mọi người, lại là mình đây Sau 1 thời gian vừa viết bài hướng dẫn, vừa viết code thì mình đã đưa được cái app cơ bản của mình lên google play. Đây là link: https://play.google.com/store/apps/details?id=com.

0 0 119

- vừa được xem lúc

Responsive và Adaptive UI trong React Native

Một số mẹo chung. . Luôn set min width và max width. Điều này giúp cover tốt được các màn hình cỡ XS hoặc XL.

0 0 68

- vừa được xem lúc

Những điều cần lưu ý và sử dụng Hook trong React (Phần 2)

II. UseEffect và điều cần lưu ý . Có hai loại xử lý phổ biến trong các thành phần React: những xử lý phụ không yêu cầu cleanup và những xử lý phụ có cleanup. Hãy xem xét sự khác biệt này chi tiết hơn.

0 0 129