Is there a way to find out how long a single-loop animated GIF will take to finish?
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
Well, the specifics sorta depends on what interface you're using to manipulate those animated GIFs (I'm not aware of a real slick way in native Java/AWT/Swing), however the basic idea would to calculate (frame rate * number of frames).
If you're coding a GIF manipulation tool by hand, I recommend taking a look at http://www.onicos.com/staff/iz/formats/gif.html
Hope this helps at least a little.
Update: Try implement the ImageObserver interface. Take a look at the ImageObserver.FRAMEBITS flag in that class to detect frame updates. http://docs.oracle.com/javase/6/docs/api/java/awt/image/ImageObserver.html
This still leaves the question of how many frames the gif has. You might want to try taking a look at the Image.getProperty() function. I'm having some difficulty finding documentation as to whether there's a "frame" property, but take a look.
Use library Metadata-Extractor to read Meta info of the Image files. The below code snippet can be used to read GifControlDirectory for each Image(frame) in the GIF file.
Note that even if GIF file has multiple frames, it is quite possible that each frame may have delay of 0 or no TAG_DELAY metadata. Also, this article details another issue of how various platforms use delay value.