Java Gif 读写

Posted

技术标签:

【中文标题】Java Gif 读写【英文标题】:Java Gif read and write 【发布时间】:2021-10-04 12:12:50 【问题描述】:

我只想读取 gif 并将其写入文件(然后我会将其与其他图像一起添加到 BufferedImage 并创建一个普通图像)。但是现在不知道为什么我的gif在读写后会变成静态的。

BufferedImage bufferedImage = ImageIO.read(new File("Uzga.gif"));
ImageIO.write(bufferedImage, "gif", new File("1.gif"));

【问题讨论】:

BufferedImage 是单个静态图像。它不支持动画图像。 【参考方案1】:

我认为你不能仅仅使用 ImageIO.write 创建一个动画礼物,你需要创建一个正确格式的礼物文件来支持动画,看看: http://openimaj.org/apidocs/org/openimaj/demos/sandbox/image/gif/GifSequenceWriter.html

GifSequencerWriter 类构造函数按此顺序将所有图像粘贴在一起的文件(输出文件)的流、图像 RGB 的类型、大文件中每个单独图像的大小块以及布尔值,如果为真,则动画循环播放。 BufferedImage img 可以与您定义的相同。大文件将是所有单独的图像或相框,并在按顺序播放时进行动画效果。

一些示例代码:

System.out.println("Writing to file.");
ImageOutputStream stream = null;
BufferedImage img = BufferedImage bufferedImage = ImageIO.read(new File("Uzga.gif"));;
try 
      stream = new FileImageOutputStream(outFile);
      GifSequenceWriter writer = new GifSequenceWriter(stream, BufferedImage.TYPE_INT_RGB, BLOCK_SIZE, true);
      for (BufferedImage img: imgs) 
      
        writer.writeToSequence(img);
      
      writer.close();
     catch (IOException e) 
    e.printStackTrace();

【讨论】:

哦,还有一个问题,我如何从一个 gif 中制作一组图像?

以上是关于Java Gif 读写的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之代理模式之读写分离!!!

基于GDAL库图像读写——涉及(tif/tiff/bmp/jpg/png/gif等)多种格式图像的I/O

读写二进制文件

hdparm命令说明及其测试硬盘读写速度

MySql主从复制与读写分离

15.Android-实现TCP客户端,支持读写