Exemple #1
0
    def animated(images, file=None, delay=300, loop=False):
        """
     Generates an anmiated GIF. 

     The *images* parameter is a sequence of objects that can be read as 
     GIF images, such as an array of bytes.

     The *file* parameter specifies the file to generate. When omitted the 
     resulting animated GIF is returned from this function as an array byte. 

     The *delay* specifies the frame rate in milliseconds. 

     The *loop* parameter specifies whether the animated GIF should loop 
     continously.
     """
        from com.sun.media.imageioimpl.plugins.gif import GIFImageWriter
        from com.sun.media.imageioimpl.plugins.gif import GIFImageWriterSpi

        out = ByteArrayOutputStream() if file is None else util.toFile(file)
        ios = ImageIO.createImageOutputStream(out)
        w = GIFImageWriter(GIFImageWriterSpi())
        w.setOutput(ios)
        w.prepareWriteSequence(None)

        wp = w.getDefaultWriteParam()
        wp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT)
        wp.setCompressionType('LZW')
        wp.setCompressionQuality(0.75)

        for img in images:
            iis = ImageIO.createImageInputStream(util.toInputStream(img))
            ri = ImageIO.read(iis)

            md = w.getDefaultImageMetadata(ImageTypeSpecifier(ri), wp)
            t = IIOMetadataTree(md)
            t.set('GraphicControlExtension', delayTime=delay / 10)
            if loop is True:
                n = t.set('ApplicationExtensions',
                          'ApplicationExtension',
                          applicationID='NETSCAPE',
                          authenticationCode='2.0')
                n.setUserObject(jarray.array([0x1, 0, 0], 'b'))
            t.commit()

            w.writeToSequence(IIOImage(ri, None, md), wp)

        w.endWriteSequence()
        ios.flush()
        ios.close()

        if file is None:
            return out.toByteArray()
Exemple #2
0
   def animated(images, file=None, delay=300, loop=False):
     """
     Generates an anmiated GIF. 

     The *images* parameter is a sequence of objects that can be read as 
     GIF images, such as an array of bytes.

     The *file* parameter specifies the file to generate. When omitted the 
     resulting animated GIF is returned from this function as an array byte. 

     The *delay* specifies the frame rate in milliseconds. 

     The *loop* parameter specifies whether the animated GIF should loop 
     continously.
     """
     from com.sun.media.imageioimpl.plugins.gif import GIFImageWriter
     from com.sun.media.imageioimpl.plugins.gif import GIFImageWriterSpi

     out = ByteArrayOutputStream() if file is None else util.toFile(file)
     ios = ImageIO.createImageOutputStream(out)
     w = GIFImageWriter(GIFImageWriterSpi())
     w.setOutput(ios)
     w.prepareWriteSequence(None)

     wp = w.getDefaultWriteParam()
     wp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT)
     wp.setCompressionType('LZW')
     wp.setCompressionQuality(0.75)

     for img in images:   
       iis = ImageIO.createImageInputStream(util.toInputStream(img))
       ri = ImageIO.read(iis)

       md = w.getDefaultImageMetadata(ImageTypeSpecifier(ri),wp)
       t = IIOMetadataTree(md)
       t.set('GraphicControlExtension', delayTime=delay/10)
       if loop is True:
         n = t.set('ApplicationExtensions', 'ApplicationExtension', 
           applicationID='NETSCAPE', authenticationCode='2.0')
         n.setUserObject(jarray.array([0x1,0, 0], 'b'))
       t.commit()

       w.writeToSequence(IIOImage(ri, None, md), wp)

     w.endWriteSequence()
     ios.flush()
     ios.close()

     if file is None:
       return out.toByteArray()