Java 修改文件头

Java 修改文件头,java,ffmpeg,animated-gif,Java,Ffmpeg,Animated Gif,是否有任何库可以接受现有的动画GIF文件并设置/取消设置循环计数和循环标志?我有两个由FFMPEG生成的GIF文件,似乎无法将循环/循环计数标志设置为FFMPEG。因此需要对GIF图像进行某种后处理。解决方案(在scala中)很简单: val raf = new RandomAccessFile(src, "rw") // skip GIF header, 6 bytes. Don't care of it much. raf.skipBytes(6) // don't need

是否有任何库可以接受现有的动画GIF文件并设置/取消设置循环计数和循环标志?我有两个由FFMPEG生成的GIF文件,似乎无法将循环/循环计数标志设置为FFMPEG。因此需要对GIF图像进行某种后处理。

解决方案(在scala中)很简单:

  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()
val raf=new RandomAccessFile(src,“rw”)
//跳过GIF标题,6个字节。不要太在意它。
raf.skipBytes(6)
//不需要图像尺寸
raf.skipBytes(4)
val flags=raf.readUnsignedByte()
val headerSize=3*(1
raf写入字节(v&0xff)
raf.writeByte((v>>8)和0xff)
}
皇家空军关闭()

你能把它转换成java吗?谢谢