1.5.5 • Published 6 years ago
@tuofeng/react-native-view-shot v1.5.5
react-native-view-shot

Snapshot a React Native view and save it to an image.
Usage
import RNViewShot from "react-native-view-shot";
RNViewShot.takeSnapshot(viewRef, {
format: "jpeg",
quality: 0.8
})
.then(
uri => console.log("Image saved to", uri),
error => console.error("Oops, snapshot failed", error)
);Example
Checkout react-native-view-shot-example
Full API
RNViewShot.takeSnapshot(view, options)
Returns a Promise of the image URI.
viewis a reference to a React Native component.optionsmay include:width/height(number): the width and height of the image to capture.format(string): eitherpngorjpg/jpegorwebm(Android). Defaults topng.quality(number): the quality. 0.0 - 1.0 (default). (only available on lossy formats like jpeg)result(string), the method you want to use to save the snapshot, one of:"file"(default): save to a temporary file (that will only exist for as long as the app is running)."base64": encode as base64 and returns the raw string. Use only with small images as this may result of lags (the string is sent over the bridge). N.B. This is not a data uri, usedata-uriinstead."data-uri": same asbase64but also includes the Data URI scheme header.
filename(string): the name of the generated file if any (Android only). Defaults toReactNative_snapshot_image_${timestamp}.
Caveats
Snapshots are not guaranteed to be pixel perfect. It also depends on the platform. Here is some difference we have noticed and how to workaround.
- Support of special components like Video / GL views remains untested.
- It's preferable to use a background color on the view you rasterize to avoid transparent pixels and potential weirdness that some border appear around texts.
specific to Android implementation
- you need to make sure
collapsableis set tofalseif you want to snapshot a View. Otherwise that view won't reflect any UI View. (found by @gaguirre) - if you want to share out the screenshoted file, you will have to copy it somewhere first so it's accessible to an Intent, see comment: https://github.com/gre/react-native-view-shot/issues/11#issuecomment-251080804 .
- if you implement a third party library and want to get back a File, you must first resolve the
Uri. thefileresult returns anUriso it's consistent with iOS and you can give it toImage.getSizefor instance.
Getting started
npm install --save react-native-view-shotMostly automatic installation
react-native link react-native-view-shotManual installation
iOS
- In XCode, in the project navigator, right click
Libraries➜Add Files to [your project's name] - Go to
node_modules➜react-native-view-shotand addRNViewShot.xcodeproj - In XCode, in the project navigator, select your project. Add
libRNViewShot.ato your project'sBuild Phases➜Link Binary With Libraries - Run your project (
Cmd+R)<
Android
- Open up
android/app/src/main/java/[...]/MainActivity.java
- Add
import fr.greweb.reactnativeviewshot.RNViewShotPackage;to the imports at the top of the file - Add
new RNViewShotPackage()to the list returned by thegetPackages()method
- Append the following lines to
android/settings.gradle:include ':react-native-view-shot' project(':react-native-view-shot').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-view-shot/android') - Insert the following lines inside the dependencies block in
android/app/build.gradle:compile project(':react-native-view-shot')
Windows
No support yet. Feel free to PR.
Thanks
- To initial iOS work done by @jsierles in https://github.com/jsierles/react-native-view-snapshot
- To React Native implementation of takeSnapshot in iOS by @nicklockwood