Socket
Socket
Sign inDemoInstall

rn-skia-sketch-canvas

Package Overview
Dependencies
1
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    rn-skia-sketch-canvas

A React Native component for drawing by touching using Skia renderer


Version published
Weekly downloads
1
Maintainers
1
Created
Weekly downloads
 

Readme

Source

rn-skia-sketch-canvas

main sync

A React Native component for drawing using Skia renderer. This project is highly influnced by terrylinla's react-native-sketch-canvas. A simple canvas that allows you to draw paths and then export them to images. This project is build on top of react-native-skia.

Installation

As this project depends on react-native-skia make sure you install that. Follow their instructions (Supports RN>=0.66)

yarn add rn-skia-sketch-canvas

Features

  • Supports both iOS and Android.
  • Stroke thickness and color are changable while drawing.
  • Can undo strokes one by one.
  • Export drawing to image (jpg/png/webp).
  • Support for drawing on top of Images/Text (See Docs)
  • Sync 2 or more canvases together (See Docs)

Usage

import { ImageFormat } from '@shopify/react-native-skia';
import React, { useRef, useState } from 'react';
import { Button, SafeAreaView, StyleSheet, View } from 'react-native';
import { SketchCanvas, SketchCanvasRef } from 'rn-skia-sketch-canvas';

const COLORS = ['red', 'blue', 'green', 'magenta', 'yellow'];

const App = () => {
  const ref = useRef<SketchCanvasRef>(null!);
  const [color, setColor] = useState('black');
  const [strokeWidth, setStrokeWidth] = useState(1);

  return (
    <SafeAreaView style={styles.container}>
      <View style={styles.container}>
        <SketchCanvas
          containerStyle={styles.container}
          ref={ref}
          strokeColor={color}
          strokeWidth={strokeWidth}
        />
        <View style={styles.btnContainer}>
          <Button title="Undo" onPress={ref.current?.undo} />
          <Button title="Clear" onPress={ref.current?.clear} />
          <Button
            title={`Color (${color})`}
            onPress={() => {
              const randomIndex = Math.floor(Math.random() * COLORS.length);
              setColor(COLORS[randomIndex]);
            }}
          />
          <Button
            title={`Stroke (${strokeWidth})`}
            onPress={() => {
              const randomIndex = Math.floor(Math.random() * COLORS.length);
              setStrokeWidth(randomIndex);
            }}
          />
          <Button
            title="Base 64"
            onPress={() => {
              console.log(ref.current.exportToBase64(ImageFormat.PNG, 50));
            }}
          />
        </View>
      </View>
    </SafeAreaView>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  btnContainer: {
    flexDirection: 'row',
    paddingHorizontal: 10,
    flexWrap: 'wrap',
  },
});

export default App;

Todo

  • Allow export to SVG for paths.

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT

Keywords

FAQs

Last updated on 19 Mar 2022

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc