Git Product home page Git Product logo

gif's Introduction

PixiJS Animated GIF

Node.js CI

Plugin to support playback of animated GIF images in PixiJS. Unlike normal GIF playback in the browser, this plugins allows you to stop, loop, change speed, or go to a specific frame.

Usage

Load an animated GIF image with Assets:

import '@pixi/gif';
import { Assets } from 'pixi.js';

const app = new Application();
const image = await Assets.load('image.gif');
app.stage.addChild(image);

To use a gif without Assets:

import { Application } from 'pixi.js';
import { AnimatedGIF } from '@pixi/gif';

const app = new Application();
fetch('image.gif')
    .then(res => res.arrayBuffer())
    .then(AnimatedGIF.fromBuffer)
    .then(image => app.stage.addChild(image));

Version Compatiblity

PixiJS PixiJS GIF
v6.x v1.x
v7.x v2.x
v8.x v3.x

gif's People

Contributors

bigtimebuddy avatar greenpixels avatar maliut avatar q1998763 avatar redgeioz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar

gif's Issues

GIF is partially rendered for some GIFs

Getting the resource.animation and adding it to the canvas for some GIFs only renders a portion of the GIF.
giphy (1)

This renders on the canvas as
image

Analysing the GIF, the first frame has smaller dimensions than the overall GIF, which might be why
image

playback from percent of page loaded

I want to control the playback of a gif, where the frame corresponds to the percentage of the base page that is loaded. In essence, a loading screen. Is this possible?

TypeError: Cannot read properties of undefined (reading 'end')

Version

    "pixi.js": "^6.2.0",
    "@pixi/gif" :"1.1.3"

I used the old docu


Install the loader for handle GIF images.

import { AnimatedGIFLoader } from '@pixi/gif';
import { Loader } from '@pixi/loaders';
Loader.registerPlugin(AnimatedGIFLoader);

function loadAsset(){
  const app = new Application();
  fetch('image.gif')
      .then(res => res.arrayBuffer())
      .then(AnimatedGIF.fromBuffer)
      .then(image => app.stage.addChild(image));
}

What does this message indicate?

How to use the plugin when gif file without extension

    use(resource: LoaderResource, next: (...args: any[]) => void): void
    {
        if (resource.extension === GIF_EXTENSION)
        {
            resource.animation = AnimatedGIF.fromBuffer(resource.data);
        }
        next();
    }

if (resource.extension === GIF_EXTENSION)

according to the source code, the plugin only works when resource extension is .gif,
while my gif url could be https://example.com/425290bcf without file extension

CANNOT READ PROPERTIES OF UNDEFINED (READING 'LINEAR')

I'm trying to use @pixijs/gif in my app but there is an issue.
when I import it:

import @pixi/gif

get this error message:

CANNOT READ PROPERTIES OF UNDEFINED (READING 'LINEAR')
TYPEERROR: CANNOT READ PROPERTIES OF UNDEFINED (READING 'LINEAR') AT EVAL (WEBPACK-INTERNAL:///./NODE_MODULES/@PIXI/GIF/DIST/PIXI-GIF.ESM.MJS:15:12094) AT ./NODE_MODULES/@PIXI/GIF/DIST/PIXI-GIF.ESM.MJS (HTTP://LOCALHOST:3000/_NEXT/STATIC/CHUNKS/SRC_COMPONENTS_CANVAS_BILLBOARDCANVAS_INDEX_TSX.JS:4362:1) AT OPTIONS.FACTORY (HTTP://LOCALHOST:3000/_NEXT/STATIC/CHUNKS/WEBPACK.JS?TS=1666530387962:688:31) AT __WEBPACK_REQUIRE__ (HTTP://LOCALHOST:3000/_NEXT/STATIC/CHUNKS/WEBPACK.JS?TS=1666530387962:37:33) AT FN (HTTP://LOCALHOST:3000/_NEXT/STATIC/CHUNKS/WEBPACK.JS?TS=1666530387962:343:21) AT EVAL (WEBPACK-INTERNAL:///./SRC/COMPONENTS/CANVAS/BILLBOARDCANVAS/INDEX.TSX:9:67) AT ./SRC/COMPONENTS/CANVAS/BILLBOARDCANVAS/INDEX.TSX (HTTP://LOCALHOST:3000/_NEXT/STATIC/CHUNKS/SRC_COMPONENTS_CANVAS_BILLBOARDCANVAS_INDEX_TSX.JS:73:1) AT OPTIONS.FACTORY (HTTP://LOCALHOST:3000/_NEXT/STATIC/CHUNKS/WEBPACK.JS?TS=1666530387962:688:31) AT __WEBPACK_REQUIRE__ (HTTP://LOCALHOST:3000/_NEXT/STATIC/CHUNKS/WEBPACK.JS?TS=1666530387962:37:33) AT FUNCTION.FN (HTTP://LOCALHOST:3000/_NEXT/STATIC/CHUNKS/WEBPACK.JS?TS=1666530387962:343:21)

"Uncaught Error: Frame index out of range" unless TARGET_FPMS is set

I'm getting an issue where unless I set TARGET_FPMS to a number, the frame index does not get set correctly and it errors out.
I suspect this is caused by the line const elapsed = this.animationSpeed * deltaTime / (settings.TARGET_FPMS as number); which if TARGET_FMPS is not set would cause elapsed to be undefined, poisoning the frame index.

I just recently switched to pixijs 7.0.0-alpha.3 and gif 2.0.0 and this error seems new to that. Looking at the code though I'm not sure why this hasn't happened before, as settings.TARGET_FPMS seems like it has been undefined for a little while at least.

The docs for 7.0.0-alpha3 state that TARGET_FPMS has a Default Value of 0.06 but in this minimal test case, I'm getting undefined for both v7 and v6.5.2

import { settings } from '@pixi/settings'
console.log(settings.TARGET_FPMS)

Anyways, hopefully this helps. If there's a right way to fix this, I'm happy to make a pull request. Otherwise, settings.TARGET_FPMS = 0.06; is a perfectly good workaround so no worries if this gets closed or something.

Some images may not be rendered correctly

Code to reproduce:

import * as PIXI from 'pixi.js';
import '@pixi/gif';

const app = new PIXI.Application();

document.body.appendChild(app.view);

const image = await PIXI.Assets.load('https://i2.mij.rip/2023/07/17/8f75a5d815120d64dbbcdc44906a975d.gif');
app.stage.addChild(image);

Probably these lines of code caused this result:

gif/src/AnimatedGIF.ts

Lines 237 to 240 in 25b3839

if (disposalType === 2 || disposalType === 3)
{
context.clearRect(0, 0, canvas.width, canvas.height);
}

How to add the gif to the specified position and size?

Hello,

I am trying below code, and just would like to add the image.gif to the specified position (x, y) with the specified size (width, height) or specified scale, How should I do? Is the image variable a texture or sprite?

Thanks v much.

import '@pixi/gif';
import { Assets } from 'pixi.js';

const app = new Application();
const image = await Assets.load('image.gif');
app.stage.addChild(image);

Using AnimatedGif.clone() should mark clones as dirty to trigger an update

Hey there,
I've noticed that cloning an AnimatedGIF and immediatly adding it to a container causes it to not be shown for a fraction of a second.

I've tried reproducing the behaviour on a StackBlitz:
https://stackblitz.com/edit/vitejs-vite-63qf4t?file=src%2Fmain.ts

I looked through the repository and if I am not mistaken it would be due to the fact that when we .clone() the AnimatedGIF ...

  • dirtyis initially set to false
  • updateFrameIndex has not been called yet, therefore not setting dirty = true
  • when updateFrameis called it won't execute since dirty is not set to true.

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.