Qualcuno è riuscito a convincere ImageIO a scrivere una GIF animata, in particolare impostando i metadati corretti? Il mio primo tentativo è più o meno come segue (dove B1 e B2 sono BufferedImages):Creazione di GIF animate con ImageIO?
ImageTypeSpecifier spec = new ImageTypeSpecifier(b1);
ImageWriter wr = ImageIO.getImageWriters(spec, "GIF").next();
wr.setOutput(ImageIO.createImageOutputStream(new File("C:\\Flashing.gif")));
ImageWriteParam param = wr.getDefaultWriteParam();
IIOMetadata meta = wr.getDefaultImageMetadata(spec, param);
wr.prepareWriteSequence(meta);
wr.writeToSequence(new IIOImage(b1, null, null), param);
wr.writeToSequence(new IIOImage(b2, null, null), param);
Questo sembra quasi di lavoro, ma:
- ho bisogno chiaramente di impostare in qualche modo i metadati "corretta" per impostare la tempo tra le immagini e idealmente renderle cicliche (stavo sperando ingenuamente che il default avrebbe fatto qualcosa di sensato, ma hey ...)
- qualunque metadata stia scrivendo di default non è ovviamente giusto: il GIMP dà un paio di errori messaggi durante il caricamento del file, sebbene l'integrazione dell'immagine in una pagina Web di prova in Firefox visualizzi il tw o immagini in rapida successione, che è tantilisingly vicino a quello che voglio ...
Se qualcuno ha la scrittura GIF animate da ImageIO al lavoro e possono condividere un frammento di codice o di lavoro come risolvere i problemi di cui sopra , Sarebbe molto apprezzato!
C'è un errore nell'esempio fornito all'interno della funzione main(). Commenti dicono: '// una sequenza gif con il tipo della prima immagine, 1 secondo tra i fotogrammi, che si interrompe continuamente, che sarebbe' nuovo GifSequenceWriter (output, firstImage.getType(), 1000, true) 'invece di 'new GifSequenceWriter (output, firstImage.getType(), 1, false)' – gvlasov
Inoltre, se si scopre che i colori trasparenti non vengono gestiti correttamente (quando si scrive un colore trasparente, un pixel del fotogramma precedente si mantiene), è necessario per fare ciò: trova una riga con 'graphicsControlExtensionNode.setAttribute (" disposalMethod "," none ");' e cambia '" none "' '' 'restoreToBackgroundColor" ' – gvlasov
Il tuo codice è ancora referenziato su StackOverflow [4 anni dopo] (http://stackoverflow.com/questions/16649620/is-there-a---to-create-one-gif-image-from-multiple-images-in-java) e ho intenzione di usarlo 7 anni dopo:) – Aaron