Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:不使用ImageReader从动画GIF获取帧_Java_Decode_Animated Gif - Fatal编程技术网

Java:不使用ImageReader从动画GIF获取帧

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

我正在开发AppEngine应用程序。它的一个功能是将动画.gif图像分割成单独的帧。我已经寻找了很多方法,找到了解决方法。不幸的是,该解决方案基于ImageReader,我无法在服务器上使用它,因为:

Google应用程序引擎的Java不支持javax.imageio.ImageReader 运行时环境


没有这个类,还有其他方法可以解码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格式。没有关于操纵帧之类的东西。你能推荐一些更详细的资源吗?