Java:不使用ImageReader从动画GIF获取帧
我正在开发AppEngine应用程序。它的一个功能是将动画.gif图像分割成单独的帧。我已经寻找了很多方法,找到了解决方法。不幸的是,该解决方案基于ImageReader,我无法在服务器上使用它,因为: Google应用程序引擎的Java不支持javax.imageio.ImageReader 运行时环境Java:不使用ImageReader从动画GIF获取帧,java,decode,animated-gif,Java,Decode,Animated Gif,我正在开发AppEngine应用程序。它的一个功能是将动画.gif图像分割成单独的帧。我已经寻找了很多方法,找到了解决方法。不幸的是,该解决方案基于ImageReader,我无法在服务器上使用它,因为: Google应用程序引擎的Java不支持javax.imageio.ImageReader 运行时环境 没有这个类,还有其他方法可以解码GIF图像吗?您应该使用图像Java API。您可以找到详细信息。首先了解一下框架本身。将动画.gif图像拆分为单独的帧有两种含义。1从字面上看,帧是指动画GI
没有这个类,还有其他方法可以解码GIF图像吗?您应该使用图像Java API。您可以找到详细信息。首先了解一下框架本身。将动画.gif图像拆分为单独的帧有两种含义。1从字面上看,帧是指动画GIF意义上的帧。问题在于构成动画GIF图像的帧是相关的。动画GIF的处理方法指示在绘制当前帧时如何处理上一帧。你可以覆盖它;在绘制新框架之前填充背景色,或者可以在绘制新框架之前执行任何您认为合适的操作。如果您认为上述情况很复杂,那么帧的透明度如何?绘制每个帧的逻辑位置 如果我们沿着这条路走,就不需要使用专用的图像阅读器,只需读取图像的相关部分并复制每个帧数据,将其与标题和调色板一起保存。结果是:生成的图像可能看起来很奇怪,毫无意义。请看下面的示例: 第一帧 第二帧 原著呢 你可以看到第二帧看起来不太好。事实是,第二帧是透明的,它构建在第一帧之上。这个动画GIF只包含2帧。我们希望你能看穿第二帧,他们一起制作一个动画 现在,让我们看看将动画.gif图像分割为单独帧的第二个含义是什么。2在本例中,帧实际上是一个复合帧,它建立在先前帧的基础上,这是我们在查看动画GIF时看到的。为了实现这一点,我们必须考虑帧循环的历史、每个帧的逻辑位置以及帧本身的透明度 让我们看看我们现在得到了什么: 第一帧 第二帧 现在第一帧与第一种情况相同,但第二帧构建在第一帧之上,不再透明 在第二种情况下,我们必须对帧进行解码和编码,以获得所需的结果。除了看起来不错之外,另一个好处是你可以用编码器支持的任何格式保存生成的图像
这篇文章中的例子是由GIF相关部分生成的Um,你用谷歌java GIF解码了吗?是的,我用谷歌java GIF解码了。前几个链接是关于Gif4J库的,但是这个库不是免费的。在其他链接中,我找到了ImageReader的解决方案,正如我在问题中提到的那样,它不适合我。本文中只有一句关于GIF的话:该服务接受JPEG、PNG、WEBP、GIF格式的图像数据,包括动画GIF、BMP、TIFF和ICO格式。没有关于操纵帧之类的东西。你能推荐一些更详细的资源吗?