0

Is there any library, which can take existing animated GIF file and set/unset loop count and loop flag? I have couple of GIF files produced by FFMPEG, and it seems not possible to set loop/loop count flags to FFMPEG. So need some sort of post-processing of GIF images.

jdevelop
  • 12,176
  • 10
  • 56
  • 112

1 Answers1

1

the solution (in scala) is that simple:

  val raf = new RandomAccessFile(src, "rw")
  // skip GIF header, 6 bytes. Don't care of it much.
  raf.skipBytes(6)
  // don't need image dimension
  raf.skipBytes(4)
  val flags = raf.readUnsignedByte()
  val headerSize = 3 * (1 << ((flags & 7) + 1)) // 00000111 - size of color table
  val headerExists = flags & 128 // 10000000 - is there a color table at all
  // skip background color and pixel ratio
  raf.skipBytes(2)
  if (headerExists != 0) {
    raf.skipBytes(headerSize)
  }
  val signature = raf.readUnsignedShort()
  require(signature == 0x21ff)
  raf.skipBytes(13) // NETSCAPE 2.0
  raf.skipBytes(1) // GIF animation flag has to be 1
  ctx.loopCount.foreach {
    v =>
      raf.writeByte(v & 0xff)
      raf.writeByte((v >> 8) & 0xff)
  }
  raf.close()
jdevelop
  • 12,176
  • 10
  • 56
  • 112