<p>所以这个GIF在打开之前看起来非常好:</p>
<p><a href="https://i.stack.imgur.com/223vK.gif" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/223vK.gif" alt="The gif before python opens"/></a></p>
<p>但是,当使用枕头打开使用</p>
<pre class="lang-py prettyprint-override"><code>imageObject = Image.open(path.join(petGifs, f"{pokemonName}.gif"))
</code></pre>
<p>它会出错,添加各种颜色与源图像相似的框。这是一个示例帧,但几乎每一帧都是不同的,它位于不同的位置,具体取决于GIF:</p>
<p><a href="https://i.stack.imgur.com/iIJL2.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/iIJL2.png" alt="one of the frames after the gif is opened in Python"/></a></p>
<p><a href="https://i.stack.imgur.com/hrnSA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/hrnSA.png" alt="another frame after the gif is opened in Python"/></a></p>
<p>唯一能解决这个问题的是ezgif的unoptimize选项(在它们的<a href="https://ezgif.com/optimize" rel="nofollow noreferrer">optimize page</a>中找到)。但是,我需要在每个GIF上都这样做,而且有很多</p>
<p>我需要一种批量未优化的方法,或者一种在Python中打开GIF的新方法(目前使用的是Pillow),这将解决这个问题</p>
<p>您可以尝试使用:</p>
<pre><code>from PIL import Image, ImageSequence
im = Image.open(f"{pokemonName}.gif")
index = 1
for frame in ImageSequence.Iterator(im):
frame.save("frame%d.png" % index)
index += 1
</code></pre>