前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rn视图生成图片并保存到相册

Rn视图生成图片并保存到相册

作者头像
明知山
发布2023-09-16 08:46:54
2150
发布2023-09-16 08:46:54
举报
文章被收录于专栏:前端开发随笔前端开发随笔
在这里插入图片描述
在这里插入图片描述

该功能依赖两个组件

完整代码

代码语言:javascript
复制
yarn add react-native-view-shot // 视图生成图片
yarn add expo-media-library  // 保存图片
代码语言:javascript
复制
import { useState, useRef } from 'react'
import ViewShot from "react-native-view-shot"
import { View, Text, Button, Image, StyleSheet } from 'react-native'
import * as MediaLibrary from 'expo-media-library'

export default () => {
    const ctxRef = useRef()
    const [imgUri, setImgUri] = useState()

    const createImg = () => {
        ctxRef.current.capture().then(uri => {
            setImgUri(uri)
        })
    }

    const saveImg = async (item) => {
        const permission = await MediaLibrary.requestPermissionsAsync()
        if (!permission.granted) return
        const asset = await MediaLibrary.createAssetAsync(item)
        MediaLibrary.createAlbumAsync('Images', asset, false).then(() => {
            console.log('保存成功')
        }).catch(() => {
            console.log('保存失败')
        })
    }

    return (
        <View>
            <ViewShot ref={ctxRef} options={{ fileName: `文件名${Date.now()}`, format: "png", result: "tmpfile" }}>
                <View style={styles.content}>
                    <Text>文字占位,文字占位,文字占位,文字占位,文字占位,文字占位</Text>
                    <Text>---------------------手动分割线---------------------</Text>
                    <Image style={styles.logo} source={{ uri: 'https://reactnative.dev/img/tiny_logo.png' }} />
                </View>
            </ViewShot>
            <Button title='生成图片' onPress={() => createImg()} />
            <Image resizeMode="contain" style={styles.pic} source={{ uri: imgUri }} />
            {imgUri && <Button title='保存图片' onPress={() => saveImg(imgUri)} />}
        </View>
    )
}

const styles = StyleSheet.create({
    content: {
        backgroundColor: "#ffffff",
        padding: 20,
    },
    logo: {
        width: 50,
        height: 50,
    },
    pic: {
        width: "100%",
        height: 200,
    }
})
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档