我目前正在开发自己的PNG过滤器。我使用神经网络尝试创建比当前现有PNG过滤器更好的预测:
有关详细信息:http://www.w3.org/TR/PNG/#9Filters
我已经查看了几个库:
还有更多。但我现在的问题是,您是否知道其他一些PNG编码器(用Java编写)哪里可以轻松添加自己的过滤器实现,还是有其他可能使用我自己的过滤器?
非常感谢您的回答!
答案 0 :(得分:8)
前段时间我做了一个小的纯Java PNG库(编码器 - 解码器)
http://code.google.com/p/pngj/
它很小,非常完整(不完全),它没有第三方库的依赖,并且代码可用(我希望,易于理解)。如果要实现自定义过滤器,可以在那里挖掘。如果您需要帮助,可以问我。
但请记住(正如其他答案所指出的)PNG标准不支持自定义过滤器,只有您能够读取您的编码图像。
答案 1 :(得分:2)
这不是问题的答案,但更多的是“它不会以这种方式运作”。
您链接的PNG specification部分定义了过滤器方法0 ,以及此方法的过滤器类型(函数)列表。此列表已修复:
过滤方法0确切地指定了这五种过滤器类型的集合,但这不应该是 延长。这确保解码器不需要解压缩数据以确定是否 它包含不受支持的过滤器类型:在IHDR中检查过滤器方法就足够了。
所以,你不能简单地在这里添加神经网络预测。
您可以做的是创建一个新的Filter方法(方法1,或者类似 - 但请参阅Section 4.9),然后可以包含您的神经网络过滤器类型。
但问题是,那么每个想要阅读你的软件产生的PNG的软件都需要支持这种新的过滤方法。因此,如果您不想仅仅为了内部图像存储而这样做,那么这不是一件有用的事情。
您实际可以使用神经网络的地方,是为每个扫描线选择正确的滤波器类型(给定的五个滤波器类型),以便生成的gzip压缩数据流尽可能小(或有效或......)