2222import javax .imageio .ImageTypeSpecifier ;
2323import javax .imageio .ImageWriteParam ;
2424import javax .imageio .ImageWriter ;
25+ import javax .imageio .metadata .IIOInvalidTreeException ;
2526import javax .imageio .metadata .IIOMetadata ;
2627import javax .imageio .metadata .IIOMetadataNode ;
2728import javax .imageio .stream .FileImageOutputStream ;
@@ -51,10 +52,18 @@ public GifSequenceWriter(ImageOutputStream outputStream, int imageType, Duration
5152 // my method to create a writer
5253 gifWriter = getWriter ();
5354 imageWriteParam = gifWriter .getDefaultWriteParam ();
55+ IIOMetadata imageMetaData2 = getMetadata (imageType , timeBetweenFramesMS , loopContinuously );
56+ imageMetaData = imageMetaData2 ;
57+ gifWriter .setOutput (outputStream );
58+ gifWriter .prepareWriteSequence (null );
59+ }
60+ private IIOMetadata getMetadata (int imageType , Duration timeBetweenFramesMS , boolean loopContinuously )
61+ throws IIOInvalidTreeException
62+ {
5463 ImageTypeSpecifier imageTypeSpecifier = ImageTypeSpecifier .createFromBufferedImageType (imageType );
55- imageMetaData = gifWriter .getDefaultImageMetadata (imageTypeSpecifier , imageWriteParam );
56- String metaFormatName = imageMetaData .getNativeMetadataFormatName ();
57- IIOMetadataNode root = (IIOMetadataNode ) imageMetaData .getAsTree (metaFormatName );
64+ IIOMetadata imageMetaData2 = gifWriter .getDefaultImageMetadata (imageTypeSpecifier , imageWriteParam );
65+ String metaFormatName = imageMetaData2 .getNativeMetadataFormatName ();
66+ IIOMetadataNode root = (IIOMetadataNode ) imageMetaData2 .getAsTree (metaFormatName );
5867 IIOMetadataNode graphicsControlExtensionNode = getNode (root , "GraphicControlExtension" );
5968 graphicsControlExtensionNode .setAttribute ("disposalMethod" , "none" );
6069 graphicsControlExtensionNode .setAttribute ("userInputFlag" , "FALSE" );
@@ -67,12 +76,15 @@ public GifSequenceWriter(ImageOutputStream outputStream, int imageType, Duration
6776 IIOMetadataNode child = new IIOMetadataNode ("ApplicationExtension" );
6877 child .setAttribute ("applicationID" , "NETSCAPE" );
6978 child .setAttribute ("authenticationCode" , "2.0" );
70- int loop = loopContinuously ? 0 : 1 ;
71- child .setUserObject (new byte []{0x1 , (byte ) (loop & 0xFF ), (byte ) ((loop >> 8 ) & 0xFF )});
79+ child .setUserObject (getBytesForUseContinuously (loopContinuously ));
7280 appEntensionsNode .appendChild (child );
73- imageMetaData .setFromTree (metaFormatName , root );
74- gifWriter .setOutput (outputStream );
75- gifWriter .prepareWriteSequence (null );
81+ imageMetaData2 .setFromTree (metaFormatName , root );
82+ return imageMetaData2 ;
83+ }
84+ public static byte [] getBytesForUseContinuously (boolean loopContinuously )
85+ {
86+ int loop = loopContinuously ? 0 : 1 ;
87+ return new byte []{0x1 , (byte ) (loop & 0xFF ), (byte ) ((loop >> 8 ) & 0xFF )};
7688 }
7789 static File writeAnimatedGif (File imageFile , ArrayList <BufferedImage > images , Duration timeBetweenFramesMS )
7890 {
0 commit comments