我正在开发一个程序,我必须在其中插入一些 gif 来解释程序的某些部分。我插入的第一个工作正常。当我将它们放入程序时,我使用的接下来三个是闪烁的(圆圈)。它们在图像查看器中不闪烁。我在 After Effects 中制作了动画,渲染为 mov,导入到 Photoshop 中并将它们导出为 gif。我试过抖动和不抖动。gif 的背景必须是透明的。
我对所有 gif 使用相同的代码。此外,我将工作 gif 插入到应该使用非工作的地方。在这个地方,good-gif 也很好用。所以我想我的代码没有问题。这就是我在程序中插入它们的方式:
JLabel gif = new JLabel(new ImageIcon(getClass().getResource("/gifs/soundcarpet.gif")));
gif.setBorder(BorderFactory.createEmptyBorder(20, 0, 0, 0));
westPanel.add(gif, BorderLayout.CENTER);
this.add(westPanel, BorderLayout.WEST);
Run Code Online (Sandbox Code Playgroud)
这是工作的 gif:工作的 gif 这是不工作的 gif之一:不工作
谁能弄清楚它们之间的区别是什么?我已经使用相同的设置制作了所有这些设置,并且现在我尝试了很多不同的设置几个小时......
谢谢!
如果您拆分 GIF,您可以看到您遇到问题的那个已经使用一种技术进行了优化,该技术使每一帧的不变部分透明(以减少文件大小)。
您可以在http://ezgif.com/split 中打开它们(选择“忽略优化”选项)以自己查看。
我真的没有在 Java 中使用 gif 的经验,但我想 java 无法处理这种类型的 gif 优化。这并不奇怪,因为即使是像 imagemagick 和 gifsicle 这样的专业编辑器有时也会在处理这样的 gif 时遇到问题,并在调整大小或裁剪时产生奇怪的结果(闪烁、伪影)。
您可以在http://ezgif.com/optimize上上传有问题的 gif并选择“Coalesce”选项,或者如果您安装了 ImageMagick,请在本地运行带有 -coalesce 选项的转换命令,它将重绘每一帧,完全删除此优化并我认为它会解决你的问题。但它会增加 gif 的文件大小。