读取动画 GIF 帧之间的延迟

2024-01-28

如何读取 GIF 动画每一帧之间的控制块?我对每一帧之间的延迟感兴趣。我查看了 ImageReader 的 Javadoc,但没有看到任何内容。

这是我从动画 GIF 中读取所有帧的代码,我如何增强它以读取有关动画 GIF 中嵌入的每个帧的元数据?

    List<BufferedImage> list = new ArrayList<BufferedImage>();
    try {
        ImageReader reader = ImageIO.getImageReadersBySuffix("gif").next();
        reader.setInput(ImageIO.createImageInputStream(urlImage.openStream()));
        int i = reader.getMinIndex();
        int numImages = reader.getNumImages(true);
        while (i < numImages)
        {
            list.add(reader.read(i++));
        }

        // do stuff with frames of image...

    } catch (Exception e) {
        e.printStackTrace();
    }

你必须寻找"delayTime"来自元数据节点的属性。使用以下工作示例来理解:

public class GiffTest {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        ImageReader reader = ImageIO.getImageReadersBySuffix("gif").next();
        reader.setInput(ImageIO.createImageInputStream(new FileInputStream("H:\\toonGif.gif")));
        int i = reader.getMinIndex();
        int numImages = reader.getNumImages(true);

        IIOMetadata imageMetaData =  reader.getImageMetadata(0);
        String metaFormatName = imageMetaData.getNativeMetadataFormatName();

    IIOMetadataNode root = (IIOMetadataNode)imageMetaData.getAsTree(metaFormatName);

    IIOMetadataNode graphicsControlExtensionNode = getNode(root, "GraphicControlExtension");

        System.out.println(graphicsControlExtensionNode.getAttribute("delayTime"));
    }

    private static IIOMetadataNode getNode(IIOMetadataNode rootNode, String nodeName) {
        int nNodes = rootNode.getLength();
        for (int i = 0; i < nNodes; i++) {
            if (rootNode.item(i).getNodeName().compareToIgnoreCase(nodeName)== 0) {
            return((IIOMetadataNode) rootNode.item(i));
            }
       }
        IIOMetadataNode node = new IIOMetadataNode(nodeName);
        rootNode.appendChild(node);
        return(node);
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

读取动画 GIF 帧之间的延迟 的相关文章

随机推荐

  • 如何使用 IntelliJ IDEA 正确配置 AdMob?

    我正在尝试将 AdMob 合并到我的 Android 应用程序中 我正在使用 IntelliJ IDEA 进行开发 但似乎无法正确设置我的项目 此时我已完成以下操作 已完成下载 AdMob SDK 所需的所有初步步骤 遵循指示here ht
  • Python:如何替换嵌套列表中的值?

    如何将詹姆斯的工资从1000替换为1500并打印詹姆斯的数据 data Ben Manager 3000 James Cleaner 1000 Ken Supervisor 2000 for name appt salary in data
  • @ConfigurationProperties:绑定类中的默认值

    我有一个配置类FooConfig 其中我有一个绑定类 Foo Configuration ConfigurationProperties foo public class FooConfig Value foo default iterat
  • 如何在 Flutter 应用程序上显示自定义字体的彩色表情符号?

    我想用Twemoji 字体 https github com eosrei twemoji color font在我的 Flutter 应用程序中 我安装了这个字体 但是当我尝试使用它时TextSpan 我看到的是单色表情符号而不是彩色表情
  • 如果“Assigned()”不能检测“悬空指针”,如何检测?

    在另一个question https stackoverflow com questions 8548843 why should i not use if assigned before using or freeing things 我
  • C# Web 服务中的加密

    我正在寻找一种简单的方法来加密我的 C Web 服务中的肥皂通信 我正在调查但微软似乎放弃了对它的支持 因此它的使用并不简单 看来 WCF 可能是一个选择 但我不想从 NET 2 0 升级 Any simple 简单的加密方法 我认为这会有
  • django欢迎页面的默认页面是谁生成的?

    我刚刚设置了 django 环境 正如教程所说 我输入了python manager py runserver它告诉我打开127 0 0 1 8000 当我打开它时 它使用了正确的欢迎页面 但我的问题是 谁生成这个默认的欢迎页面 既然没有v
  • 用于为 REST 服务创建客户端存根的 java 工具

    假设我获得了 REST Web 服务的 WADL 并且我已经能够在 SoapUI 中组合一堆请求 我对 REST 或 SOAP 并不陌生 而且我已经设法使用 wadl2java 工具来从我的 WADL 自动生成并编译类 有没有教程演示如何使
  • 如何更改 xamarin.ios 中 UITextView 中的链接颜色

    我们使用此代码在 UITextView 中创建了可点击的文本 var urlString a href a www google com gt Google var documentAttributes new NSAttributedSt
  • 使用解析的字符串值过滤 MS SQL 2008 服务器中的日期时间列

    我不确定如何使这个问题的标题更具体 我正在开发 ASP NET MVC3 应用程序 在那里 我使用 jQuery 网格来显示数据库中的数据 并且几乎没有过滤器 其中之一应该允许用户按日期搜索 在我的数据库中Date列看起来像这样 我将选定的
  • 在 PySpark 中获取序列文件格式的文件的 HDFS 文件路径

    我在 HDFS 上的数据是序列文件格式 我正在使用 PySpark Spark 1 6 并试图实现两件事 数据路径包含 yyyy mm dd hh 格式的时间戳 我想将其带入数据本身 我尝试了 SparkContext wholeTextF
  • 使用ggplot2绘制时间序列数据

    我正在做一个项目 需要使用 ggplot2 来绘制时间序列数据 这是我正在使用的数据集 这就是我现在所做的 library ggplot2 library lubridate eur Date lt as Date eur Date ggp
  • 如何将 CodeIgniter 的 set_value 用于数组字段?

    我有一个标记为 amenities 的下拉菜单 它是一个数组 当我使用 CodeIgniter 的 form validation 时 我想使用 set value 正确重新填充它 但我无法做到 有人对此有任何意见吗 查看 Codeigni
  • 如何禁用 Android 设备的强制网络助手?

    当用户通过强制门户连接到开放 WiFi 时 Android 设备将打开带有强制门户 登录页面的浏览器实例 我们想禁用它 因为我们使用应用程序进行登录 我在 Android Marshmallow 中遇到了 CaptivePortal 类 我
  • MVVM + ViewModel 调用的 View 特定功能的实现

    这是我想解决的 问题 我有许多 仅查看 特定功能 例如 在运行时更改视图的资源字典 用于将皮肤从黑色更改为蓝色或其他 保存和恢复 查看特定设置 例如视图大小或用户设置的网格属性 所有这些功能都与 ViewModel 无关 因为它们实际上是特
  • 程序逻辑的可视化表示

    我想通过图表来表示我的程序的逻辑 因为该程序非常复杂 我需要一种方法来向另一个人解释我的程序中发生某些事情的原因和方式 流程图是唯一的选择吗 在 UML 中 不同的图针对不同的事物 使用不同的方法 考虑到我们倾向于倾向于面向对象的方法 我将
  • 为 Windows 8 应用商店应用程序启用“Toast 通知”

    我想为我正在构建的 Windows 8 应用商店应用程序启用 Toast 通知 文档说 只需在应用程序 UI 选项卡的通知部分中将 Toast Capable 选项设置为 是 即可 取自如何选择接收 Toast 通知 http msdn m
  • 错误 APT0000:检索项目的父级时出错:找不到与给定名称“Theme.AppCompat.Light.NoActionBar”匹配的资源。 (APT0000)

    我是 xamarin 工作室的新手 我已将与目标 API 23 相对应的所有必需包添加到我的 android xamarin studio 项目中 将其设置为正确的目标 API 23 但我仍然被下图中的这些错误所困扰 任何提供的帮助将不胜感
  • WPF 工具包 DataGrid 性能

    我有一个包含 6 列的 DataGrid 每列都是一个 RadioButton 以便用户可以在 6 个选项中选择 1 个 大约有100行 我使用 6 个 bool 数据成员创建一个自定义类 然后将数据网格与大约 100 个自定义类对象的列表
  • 读取动画 GIF 帧之间的延迟

    如何读取 GIF 动画每一帧之间的控制块 我对每一帧之间的延迟感兴趣 我查看了 ImageReader 的 Javadoc 但没有看到任何内容 这是我从动画 GIF 中读取所有帧的代码 我如何增强它以读取有关动画 GIF 中嵌入的每个帧的元