Skip to content

🚀 A simple GIF encoder for Android.

License

Notifications You must be signed in to change notification settings

Cryolitia/BurstLinker

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BurstLinker

Use these packages

Add following codes in settings.gradle

dependencyResolutionManagement {
    repositories {
        maven {
            url = uri("https://maven.pkg.github.com/Cryolitia/BurstLinker")
            credentials {
                username = "Cryolitia"
                password = "9sb2n1ZvKGNMSzXqd0vIxX4nJJuRQHMOc3pf_phg".reverse()
            }
        }
        //other repositories……
    }
}

use implementation("com.bilibili:burstlinker:0.0.13") in dependencies

Then, just enjoy it! ^_^


Download

Idea from: square/gifencoder

BurstLinker is a simple C++ GIF encode library.

Download

Android

Gradle:

implementation 'com.bilibili:burst-linker:latest-version'

Build Environment

Android Studio 3.4.1

NDK r20

Basic usage

int delayMs = 1000;
String filePath = getCacheDir() + File.separator + "out.gif";
BurstLinker burstLinker = new BurstLinker();

try {
    burstLinker.init(width, height, filePath);
    Bitmap colorBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(colorBitmap);
    Paint p = new Paint();
    int[] colors = new int[]{0xFFF00000, 0xFFFFFF00, 0xFFFFFFFF};
    for (int color : colors) {
        p.setColor(color);
        canvas.drawRect(0, 0, width, height, p);
        burstLinker.connect(colorBitmap, BurstLinker.OCTREE_QUANTIZER, 
                BurstLinker.NO_DITHER, 0, 0, delayMs);
    }
} catch (GifEncodeException e) {
    e.printStackTrace();
} finally {
    burstLinker.release();
}

Enable RenderScript Support

This is an untested feature.

  1. Choose the Git branch "/feature/render-script".
  2. Sync Project with Gradle Files, It will generate the required file named "ScriptC_*.cpp".
  3. Uncomment the line 64 of the "/lib/CMakeLists.txt".
  4. Try this function.

Linux & Mac

  1. Install CMake

    • Mac brew install cmake
    • ArchLinux sudo pacman -S cmake
  2. Build

    • cd /BurstLinker
    • mkdir cmake-build-debug; cd cmake-build-debug
    • cmake ..
    • make BurstLinker
  3. Run

    • ./BurstLinker 1000 1.jpg 2.jpg 3.jpg
    • See the "out.gif"

Windows

  1. Install Microsoft Visual Studio & CMake

  2. Build

    • cd /BurstLinker
    • mkdir cmake-build-debug; cd cmake-build-debug
    • cmake ..
    • Open the "BurstLinker.sln"
    • Solution Explorer -> BurstLinker -> Build
  3. Run

    • cd Debug
    • BurstLinker.exe 1000 1.jpg 2.jpg 3.jpg
    • See the "out.gif"

Samples

Different quantizers & ditherers

  • Original

original

  • Uniform + No

uniform

  • MedianCut + No

media-cut

  • KMeans + No

k-means

  • Random + No

random

  • Octree + No

octree

  • NeuQuant - 10 + No

neu-quant-10

  • NeuQuant - 1 + No

neu-quant-1

  • Octree + M2

uniform

  • Octree + Bayer

octree-bayer

  • Octree + FloydSteinberg

octree-floyd-steinberg

Encodes images with transparent channels

  • Original

bilibili

  • Octree + No + Default

    Display all Alpha channels greater than 0. (ARGB.a != 0)

bilibili-octree

  • Octree + No + Ignored translucency

    Display only the Alpha channels equal to 255. (ARGB.a == 255)

bilibili-octree

Thanks

square/gifencoder

waynejo/android-ndk-gif

lucent1090/MCCQ

luxiaoxun/KMeans-GMM-HMM

SimonBoorer/Quantize

dali-neuquant

FFmpeg/FFmpeg

progschj/ThreadPool

License

Copyright 2018 Bilibili

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

About

🚀 A simple GIF encoder for Android.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages

  • C++ 95.0%
  • Java 3.1%
  • CMake 1.1%
  • Kotlin 0.8%