Файл не загружается на сервер — всё происходит в браузере.
Раскадровка работает на @la-moore/gif — TypeScript-библиотеке для чтения и записи GIF в браузере. Палитра подбирается в веб-воркерах, а «назад» и «бумеранг» — это одна опция.
import { GifReader, GifWriter } from '@la-moore/gif'
const reader = new GifReader()
await reader.loadBlob(file)
const gif = new GifWriter({
width: reader.width,
height: reader.height,
playbackMode: 'bounce', // или 'reverse'
})
reader.forEach((frame, i, rgba) => {
const image = new ImageData(rgba, reader.width, reader.height)
gif.addFrameImageData(image, { delay: frame.delay * 10 })
})
gif.getBlobGIF((blob) => {
img.src = URL.createObjectURL(blob)
})