Git Product home page Git Product logo

canvas-gif's Introduction


canvas-gif

npm i canvas-gif

Package Size Version

What is canvas-gif?

canvas-gif is an NPM library that allows you to manipulate the frames of GIFs using node-canvas.

canvas-gif has been deprecated. I seldom use Node.js, let alone do I have a use for a package like this. If you are interested in taking over development, feel free to fork it and publish it yourself. My time with this library, however, has come to a halt.

How does it work?

It works by following these instructions:

  1. Read the input GIF as a Buffer (optional: coalesce the GIF if the option has been enabled and graphicsmagick is available)
  2. Decode the GIF into UInt8Array(s)
  3. For each frame in the GIF, create a canvas instance
  4. Transform the UInt8Array into canvas image data and put it onto the context
  5. Pass the context and other relevant information to the user defined editFrame function that will continue to manipulate the context.
  6. Add the newly edited frame's context to the encoder
  7. Output the encoder's data as a Buffer and return it

How can I make use of it?

You can download it using npm by running

npm i canvas-gif

And you can then proceed to use it in your code. For an example of how to do so, please check out the example folder.

Options

All of these options are optional! wow

  • coalesce - Whether the GIF should be coalesced by GraphicsMagick before being processed by the engine. Requires GraphicsMagick to be installed - if it is not and the option is true and error will be thrown and the code will continue with the original file buffer. Defaults to false
  • delay - The amount of delay between each frame in ms. Defaults to 0
  • repeat - How many times the GIF should repeat. If the value is 0, it will repeat forever. Defaults to 0
  • algorithm - The algorithm the encoder should use. Can be one of neuquant and octree. Defaults to neuquant
  • optimiser - Whether the encoder should use its in-built optimiser. Defaults to false
  • fps - The amount of frames to render per second. Defaults to 60
  • quality - The quality of the GIF. A value between 1-100. The higher the number, the better quality the GIF will be. Defaults to 100

Common Errors

There was an error during coalescing: Stream yields empty buffer. Reverting buffer to file buffer!

This error happens if the coalescing option is enabled but you are missing GraphicsMagick. Please install it from here and if the error persists feel free to report it as a problem and I'll try my best to help!

this project uses the opinionated queer license v1.1 - tl;dr see here :]

To-do

  • Return emitter for easy event handling

canvas-gif's People

Contributors

newtykip avatar renovate-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

canvas-gif's Issues

API docs?

seems like an interesting project but can you let me know what features you support?

I'd like to overlay some images and text onto an animated GIF (eg memegenerator) is that possible?

Example folder is gone :(

I'm too much of a noob to understand how to use this package and I would appreciate a small example to guide me.

Gif is distorted + much faster

Code

import canvasGif from "canvas-gif"
import fs from "fs"

const gifUrl = "https://compote.slate.com/images/697b023b-64a5-49a0-8059-27b963453fb1.gif"

const makeGif = async () => {
	const response = await fetch(gifUrl)
	const arrayBuffer = await response.arrayBuffer()
	canvasGif(Buffer.from(arrayBuffer), (ctx, width, height, totalFrames, currentFrame) => {
		ctx.fillStyle = "#fff"
		ctx.font = "30px 'Fira Code Retina'"
		ctx.fillText("this is epic!?!", 50, 100)
		ctx.fillText(`Frame ${currentFrame}/${totalFrames}`, 50, 300)
	}, {}).then((buffer) => {
		fs.writeFileSync("./output.gif", buffer)
		console.log("Done!")
	})
}

makeGif()

Original gif

input

Modified

output

How can I fix the distortion? Also, is there a way to set the fps the same as the original gif? The problem isn't Buffer.from(arrayBuffer) because when I write that to ./output.gif directly, there is no distortion.

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.