Bonjour,

Je cherche depuis pas mal de temps un moyen de changer les dimensions d'une image gif animé, j'ai déjà trouvé des sources sur internet mais je n'arrive pas à agrandir cette fameuse image.

Pour le script qui s'en rapproche le plus j'ai trouvé celui ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
from PIL import Image, ImageTk
 
def resize_gif(path, save_as=None, resize_to=None):
    """
    Resizes the GIF to a given length:
 
    Args:
        path: the path to the GIF file
        save_as (optional): Path of the resized gif. If not set, the original gif will be overwritten.
        resize_to (optional): new size of the gif. Format: (int, int). If not set, the original GIF will be resized to
                              half of its size.
    """
    all_frames = extract_and_resize_frames(path, resize_to)
 
    if not save_as:
        save_as = path
 
    if len(all_frames) == 1:
        print("Warning: only 1 frame found")
        all_frames[0].save(save_as, optimize=True)
    else:
        all_frames[0].save(save_as, optimize=True, save_all=True, append_images=all_frames[1:], loop=1000)
 
 
def analyseImage(path):
    """
    Pre-process pass over the image to determine the mode (full or additive).
    Necessary as assessing single frames isn't reliable. Need to know the mode
    before processing all frames.
    """
    im = Image.open(path)
    results = {
        'size': im.size,
        'mode': 'full',
    }
    try:
        while True:
            if im.tile:
                tile = im.tile[0]
                update_region = tile[1]
                update_region_dimensions = update_region[2:]
                if update_region_dimensions != im.size:
                    results['mode'] = 'partial'
                    break
            im.seek(im.tell() + 1)
    except EOFError:
        pass
    return results
 
 
def extract_and_resize_frames(path, resize_to=None):
    """
    Iterate the GIF, extracting each frame and resizing them
 
    Returns:
        An array of all frames
    """
    mode = analyseImage(path)['mode']
 
    im = Image.open(path)
 
    if not resize_to:
        resize_to = (im.size[0] // 2, im.size[1] // 2)
 
    i = 0
    p = im.getpalette()
    last_frame = im.convert('RGBA')
 
    all_frames = []
 
    try:
        while True:
            # print("saving %s (%s) frame %d, %s %s" % (path, mode, i, im.size, im.tile))
 
            '''
            If the GIF uses local colour tables, each frame will have its own palette.
            If not, we need to apply the global palette to the new frame.
            '''
            if not im.getpalette():
                im.putpalette(p)
 
            new_frame = Image.new('RGBA', im.size)
 
            '''
            Is this file a "partial"-mode GIF where frames update a region of a different size to the entire image?
            If so, we need to construct the new frame by pasting it on top of the preceding frames.
            '''
            if mode == 'partial':
                new_frame.paste(last_frame)
 
            new_frame.paste(im, (0, 0), im.convert('RGBA'))
 
            new_frame.thumbnail(resize_to, Image.ANTIALIAS)
            all_frames.append(new_frame)
 
            i += 1
            last_frame = new_frame
            im.seek(im.tell() + 1)
    except EOFError:
        pass
 
    return all_frames
Ce code me permet de diminuer les dimensions mais malheureusement, je n'arrive pas à agrandir l'image davantage que ses dimensions initiales, si j'ai bien compris, la redimension de chaque frame se trouve dans la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
new_frame.thumbnail(resize_to, Image.ANTIALIAS)
, ma question est donc ; est ce impossible de mettre des dimensions plus élevés que celles de bases?

Cordialement