java GifSequenceWriter gif质量

时间:2017-06-05 17:58:00

标签: java animated-gif image-quality

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

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

或者它应该是来自 imageWriteParam 的某些属性?我搜索了一下,似乎实际的"质量"参数 - 至少对于JPEG图像 - 可以通过 imageWriteParam.setCompressionQuality(float someFloatValueHere)进行设置,但是当我尝试它会抛出异常时我猜想GIF没有压缩质量参数......或者是它?

有人猜怎么解决这个问题?

BTW是的我已经搜索过互联网 - 没有运气(我甚至找不到任何地方的.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值的解决方案......? :)

0 个答案:

没有答案