gifwrap icon indicating copy to clipboard operation
gifwrap copied to clipboard

Using all ram

Open mctrivia opened this issue 3 years ago • 1 comments

I am using the following function to try and create a thumbnail of a gif with a mask. icon.data is a buffer containing the gif data. The addMask function works with JIMP variables and works. even if I comment out the line that manipulates the frame it uses up all the ram and crashes with a FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

            let sourceGif=await codec.decodeGif(icon.data);
            for (let i in sourceGif.frames) {
                let frameImage = GifUtil.copyAsJimp(Jimp, sourceGif.frames[i]);
                //frameImage=await addMask(frameImage,icon); //function that resizes a frame and adds a mask to the frame 
                sourceGif.frames[i]=new GifFrame(frameImage.bitmap);
            }
            GifUtil.quantizeDekker(sourceGif.frames, 256);

            // The encoder determines GIF size from the frames, not the provided spec (sourceGif).
            outputBuffer=codec.encodeGif(sourceGif.frames, sourceGif);

After some more checks I find that it is the GifUtil.quantizeDekker function causing the problem.

mctrivia avatar Jul 27 '22 02:07 mctrivia

ran some tests. GifUtil.quantizeDekker uses about 20MB of ram for each 350x350px frame in my gif. So at frame 166 it goes over 4GB of ram. So its currently using 163 bytes per pixel. Only way to fix would be to make more efficient.

mctrivia avatar Jul 27 '22 14:07 mctrivia