Coder Social home page Coder Social logo

toursslivers / rlottie Goto Github PK

View Code? Open in Web Editor NEW

This project forked from samsung/rlottie

0.0 0.0 0.0 12.84 MB

A platform independent standalone library that plays Lottie Animation.

License: Other

Shell 0.05% C++ 74.83% C 22.79% Assembly 1.02% HTML 0.06% CMake 0.62% Meson 0.64%

rlottie's Introduction

rlottie

Build Status Build status Gitter

rlottie is a platform independent standalone c++ library for rendering vector based animations and art in realtime.

Lottie loads and renders animations and vectors exported in the bodymovin JSON format. Bodymovin JSON can be created and exported from After Effects with bodymovin, Sketch with Lottie Sketch Export, and from Haiku.

For the first time, designers can create and ship beautiful animations without an engineer painstakingly recreating it by hand. Since the animation is backed by JSON they are extremely small in size but can be large in complexity!

Here are small samples of the power of Lottie.

Contents

Building Lottie

rlottie supports meson and cmake build system. rlottie is written in C++14. and has a public header dependency of C++11

Meson Build

install meson and ninja if not already installed.

Run meson to configure rlottie

meson build

Run ninja to build rlottie

ninja -C build

Cmake Build

Install cmake if not already installed

Create a build directory for out of source build

mkdir build

Run cmake command inside build directory to configure rlottie.

cd build
cmake ..

# install in a different path. eg ~/test/usr/lib
cmake -DCMAKE_INSTALL_PREFIX=~/test ..

# static build
cmake -DBUILD_SHARED_LIBS=OFF ..

Run make to build rlottie

make -j 2

To install rlottie library

make install

Test

Configure to build test

meson configure -Dtest=true

Build test suit

ninja

Run test suit

ninja test

Back to contents

Demo

If you want to see rlottie library in action without building it please visit rlottie online viewer

While building rlottie library it generates a simple lottie to GIF converter which can be used to convert lottie json file to GIF file.

Run Demo

lottie2gif [lottie file name]

Previewing Lottie JSON Files

Please visit rlottie online viewer

rlottie online viewer uses rlottie wasm library to render the resource locally in your browser. To test your JSON resource drag and drop it to the browser window.

Quick Start

Lottie loads and renders animations and vectors exported in the bodymovin JSON format. Bodymovin JSON can be created and exported from After Effects with bodymovin, Sketch with Lottie Sketch Export, and from Haiku.

You can quickly load a Lottie animation with:

auto animation = rlottie::Animation::loadFromFile("absolute_path/test.json");

You can load a lottie animation from raw data with:

auto animation = rlottie::Animation::loadFromData(std::string(rawData), std::string(cacheKey));

Properties like frameRate , totalFrame , duration can be queried with:

# get the frame rate of the resource.
double frameRate = animation->frameRate();

#get total frame that exists in the resource
size_t totalFrame = animation->totalFrame();

#get total animation duration in sec for the resource
double duration = animation->duration();

Render a particular frame in a surface buffer immediately with:

rlottie::Surface surface(buffer, width , height , stride);
animation->renderSync(frameNo, surface);

Render a particular frame in a surface buffer asyncronousely with:

rlottie::Surface surface(buffer, width , height , stride);
# give a render request
std::future<rlottie::Surface> handle = animation->render(frameNo, surface);
...
#when the render data is needed
rlottie::Surface surface = handle.get();

Back to contents

Dynamic Property

You can update properties dynamically at runtime. This can be used for a variety of purposes such as:

  • Theming (day and night or arbitrary themes).
  • Responding to events such as an error or a success.
  • Animating a single part of an animation in response to an event.
  • Responding to view sizes or other values not known at design time.

Understanding After Effects

To understand how to change animation properties in Lottie, you should first understand how animation properties are stored in Lottie. Animation properties are stored in a data tree that mimics the information hierarchy of After Effects. In After Effects a Composition is a collection of Layers that each have their own timelines. Layer objects have string names, and their contents can be an image, shape layers, fills, strokes, or just about anything that is drawable. Each object in After Effects has a name. Lottie can find these objects and properties by their name using a KeyPath.

Usage

To update a property at runtime, you need 3 things:

  1. KeyPath
  2. rLottie::Property
  3. setValue()

KeyPath

A KeyPath is used to target a specific content or a set of contents that will be updated. A KeyPath is specified by a list of strings that correspond to the hierarchy of After Effects contents in the original animation. KeyPaths can include the specific name of the contents or wildcards:

  • Wildcard *
    • Wildcards match any single content name in its position in the keypath.
  • Globstar **
    • Globstars match zero or more layers.

Properties

rLottie::Property is an enumeration of properties that can be set. They correspond to the animatable value in After Effects and the available properties are listed below.

enum class Property {
    FillColor,     /*!< Color property of Fill object , value type is rlottie::Color */
    FillOpacity,   /*!< Opacity property of Fill object , value type is float [ 0 .. 100] */
    StrokeColor,   /*!< Color property of Stroke object , value type is rlottie::Color */
    StrokeOpacity, /*!< Opacity property of Stroke object , value type is float [ 0 .. 100] */
    StrokeWidth,   /*!< stroke with property of Stroke object , value type is float */
    ...
};

setValue()

setValue() requires a keypath of string and value. The value can be Color, Size and Point structure or a function that returns them. Color, Size, and Point vary depending on the type of rLottie::Property. This value or function(callback) is called and applied to every frame. This value can be set differently for each frame by using the FrameInfo argument passed to the function.

Usage

animation->setValue<rlottie::Property::FillColor>("**",rlottie::Color(0, 1, 0));
animation->setValue<rlottie::Property::FillColor>("Layer1.Box 1.Fill1",
    [](const rlottie::FrameInfo& info) {
         if (info.curFrame() < 15 )
             return rlottie::Color(0, 1, 0);
         else {
             return rlottie::Color(1, 0, 0);
         }
     });

Back to contents

Supported After Effects Features

Shapes Supported
Shape ๐Ÿ‘
Ellipse ๐Ÿ‘
Rectangle ๐Ÿ‘
Rounded Rectangle ๐Ÿ‘
Polystar ๐Ÿ‘
Group ๐Ÿ‘
Trim Path (individually) ๐Ÿ‘
Trim Path (simultaneously) ๐Ÿ‘
Renderable Supported
Fill ๐Ÿ‘
Stroke ๐Ÿ‘
Radial Gradient ๐Ÿ‘
Linear Gradient ๐Ÿ‘
Gradient Stroke ๐Ÿ‘
Transforms Supported
Position ๐Ÿ‘
Position (separated X/Y) ๐Ÿ‘
Scale ๐Ÿ‘
Skew โ›”๏ธ
Rotation ๐Ÿ‘
Anchor Point ๐Ÿ‘
Opacity ๐Ÿ‘
Parenting ๐Ÿ‘
Auto Orient ๐Ÿ‘
Interpolation Supported
Linear Interpolation ๐Ÿ‘
Bezier Interpolation ๐Ÿ‘
Hold Interpolation ๐Ÿ‘
Spatial Bezier Interpolation ๐Ÿ‘
Rove Across Time ๐Ÿ‘
Masks Supported
Mask Path ๐Ÿ‘
Mask Opacity ๐Ÿ‘
Add ๐Ÿ‘
Subtract ๐Ÿ‘
Intersect ๐Ÿ‘
Lighten โ›”๏ธ
Darken โ›”๏ธ
Difference โ›”๏ธ
Expansion โ›”๏ธ
Feather โ›”๏ธ
Mattes Supported
Alpha Matte ๐Ÿ‘
Alpha Inverted Matte ๐Ÿ‘
Luma Matte ๐Ÿ‘
Luma Inverted Matte ๐Ÿ‘
Merge Paths Supported
Merge โ›”๏ธ
Add โ›”๏ธ
Subtract โ›”๏ธ
Intersect โ›”๏ธ
Exclude Intersection โ›”๏ธ
Layer Effects Supported
Fill โ›”๏ธ
Stroke โ›”๏ธ
Tint โ›”๏ธ
Tritone โ›”๏ธ
Levels Individual Controls โ›”๏ธ
Text Supported
Glyphs โ›”๏ธ
Fonts โ›”๏ธ
Transform โ›”๏ธ
Fill โ›”๏ธ
Stroke โ›”๏ธ
Tracking โ›”๏ธ
Anchor point grouping โ›”๏ธ
Text Path โ›”๏ธ
Per-character 3D โ›”๏ธ
Range selector (Units) โ›”๏ธ
Range selector (Based on) โ›”๏ธ
Range selector (Amount) โ›”๏ธ
Range selector (Shape) โ›”๏ธ
Range selector (Ease High) โ›”๏ธ
Range selector (Ease Low) โ›”๏ธ
Range selector (Randomize order) โ›”๏ธ
expression selector โ›”๏ธ
Other Supported
Expressions โ›”๏ธ
Images ๐Ÿ‘
Precomps ๐Ÿ‘
Time Stretch ๐Ÿ‘
Time remap ๐Ÿ‘
Markers ๐Ÿ‘

Back to contents

Issues or Feature Requests?

File github issues for anything that is broken. Be sure to check the list of supported features before submitting. If an animation is not working, please attach the After Effects file to your issue. Debugging without the original can be very difficult. For immidiate assistant or support please reach us in Gitter

rlottie's People

Contributors

smohantty avatar hermet avatar jsuya avatar jaeunchoi avatar mymedia2 avatar john-preston avatar start1a avatar vtorri avatar bryceharrington avatar korniltsev avatar nokeya avatar sjh7141 avatar scl2589 avatar xspeed1989 avatar xaowang96 avatar yuangu avatar somang-park avatar msnodeve avatar kimcinoo avatar kekepower avatar crizan avatar wangwenx190 avatar xvitaly avatar sunny-g avatar simonschmeisser avatar mrmoeinm avatar mihais avatar mikke89 avatar mjunix avatar antonsergeev88 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.