Generating an animated GIF in Python

后端 未结 3 654
野的像风
野的像风 2020-12-30 06:50

I\'m trying to generate an animated GIF using images2gif.py (pastebin to the most recent verson : bit.ly/XMMn5h ).

I\'m using this Python script:

         


        
相关标签:
3条回答
  • 2020-12-30 07:07

    Python, Create a .gif from an numpy ndarray of numpy ndarrays representing images :

    import os
    import numpy as np
    from moviepy.editor import ImageSequenceClip
    #Installation instructions: 
    #    pip install numpy
    #    pip install moviepy
    #    Moviepy needs ffmpeg tools on your system
    #        (I got mine with opencv2 installed with ffmpeg support)
    
    def create_gif(filename, array, fps=10, scale=1.0):
        """creates a gif given a stack of ndarray using moviepy
        Parameters
        ----------
        filename : string
            The filename of the gif to write to
        array : array_like
            A numpy array that contains a sequence of images
        fps : int
            frames per second (default: 10)
        scale : float
            how much to rescale each image by (default: 1.0)
        """
        fname, _ = os.path.splitext(filename)   #split the extension by last period
        filename = fname + '.gif'               #ensure the .gif extension
        if array.ndim == 3:                     #If number of dimensions are 3, 
            array = array[..., np.newaxis] * np.ones(3)   #copy into the color 
                                                          #dimension if images are 
                                                          #black and white
        clip = ImageSequenceClip(list(array), fps=fps).resize(scale)
        clip.write_gif(filename, fps=fps)
        return clip
    
    randomimage = np.random.randn(100, 64, 64)       
    create_gif('test.gif', randomimage)                 #example 1
    
    myimage = np.ones(shape=(300, 200))
    myimage[:] = 25
    myimage2 = np.ones(shape=(300, 200))
    myimage2[:] = 85
    arrayOfNdarray = np.array([myimage, myimage2])
    
    create_gif(filename="grey_then_black.gif",          #example 2
               array=arrayOfNdarray, 
               fps=5, 
               scale=1.3)
    

    Prints:

    [MoviePy] Building file test.gif with imageio
    100%|██████████████████████████████████████████| 100/100 [00:00<00:00, 905.27it/s]
    
    [MoviePy] Building file grey_then_black.gif with imageio
     67%|█████████████████████████▎                | 2/3 [00:00<00:00, 65.65it/s]
    
    0 讨论(0)
  • 2020-12-30 07:08

    OK I have tested your exact code on two different machines, and it works perfectly on both. One machine is Ubuntu 12.04 and the other is running Windows XP. They are both using Python 2.7, and the latest version of images2gif which I downloaded from here. I recommend the following:

    1. check what version of python and the libraries you are using, try and get the latest ones.
    2. test it on another machine
    3. try and uninstall python and all the libraries and try and re-install
    0 讨论(0)
  • 2020-12-30 07:15

    In the list constructor

        (fn for fn in os.listdir('.') if fn.endswith('.gif'))
    

    the endswith is case sensitive, so if you happen to have all GIF images, then they won't be found, and you will get a

        ValueError: max() arg is an empty sequence
    

    error.

    I suggest using

        (fn for fn in os.listdir('.') if fn.endswith('.gif') or fn.endswith('.GIF'))
    

    for success with this. Also, it's a good idea to create the animated gif file in the parent (or at least another) directory.

    0 讨论(0)
提交回复
热议问题