0

我创建了使用GifSequenceWriter类从 PNG 序列创建动画 GIF 的 JAVA 应用程序,但我注意到 gif 质量非常糟糕,所以我想知道是否有一些选项可以设置输出 gif的最大质量为256 色似乎目前(默认情况下)它充其量仅默认使用 128 色(甚至更少!),这是非常糟糕且几乎无法使用的(例如,在所有颜色弯曲的情况下,阴影看起来非常糟糕,没有保留任何细节ETC。)。

我测试了在单独的 GIF 制作工具(一个小型​​ Windows 应用程序)中创建相同的 PNG 序列,并且输出 gif - 与 GifSequenceWriter 的输出相比 -非常非常好(保留了所有精细细节的阴影,几乎不可见的颜色弯曲等)所以我想 GifSequenceWriter 类中很可能应该有某种 IIOMetadataNode .setAttribute()值来处理图像输出质量,但我自己无法识别它......

或者它应该是imageWriteParam的一些属性?我搜索了更多,似乎实际的“质量”参数 - 至少对于 JPEG 图像 - 可以通过imageWriteParam.setCompressionQuality(float someFloatValueHere)设置,但是当我尝试它抛出异常时,因为我猜没有压缩质量参数对于 GIF ......或者是吗?

任何猜测任何人如何解决这个问题?

顺便说一句,是的,我已经搜索过互联网 - 没有运气(我什至在任何地方都找不到任何 .setAttribute() 选项/值列表,很奇怪,不是吗?)


编辑 因此,在阅读了@Marco13 提供的属性值的链接后,我已将此代码部分实现到GifSequenceWriter 中

IIOMetadataNode localColorTableNode = getNode(root, "LocalColorTable");
localColorTableNode.setAttribute("sizeOfLocalColorTable", "256");
localColorTableNode.setAttribute("sortFlag", "FALSE");

IIOMetadataNode colorTableEntryNode = getNode(localColorTableNode, "ColorTableEntry");
colorTableEntryNode.setAttribute("index", someIntA);
colorTableEntryNode.setAttribute("red", someIntB);
colorTableEntryNode.setAttribute("green", someIntC);
colorTableEntryNode.setAttribute("blue", someIntD);

但是我不知道我应该添加什么样的someIntA/someIntB/someIntC/someIntD int 值 - 任何人都猜到了,我是在正确的方向还是什么?我觉得我可能是在正确的位置(只是也许!)但我想我需要一个小踢或什么......也许我不明白这里的一些东西,我需要一些解释......或者只是马上这些 int 值的解决方案...?:)

4

0 回答 0