-
-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
First frame of transparent GIF is read incorrectly #6590
Comments
If you run the following code, you will see that the GIF is in P mode for the first frame, and then RGBA mode for the subsequent frames that. However, when it is converted to NumPy and then back, the first frame becomes L. You have lost the palette. This is understandable, because a P mode image consists of each pixel as an index in a palette, and the palette itself. When converting to a NumPy array, it would only be copying the indexes of the pixels. from PIL import Image
import numpy
inputFileName = "squidcat.gif"
outputFileName = "pngcat"
frames = []
with Image.open(inputFileName, formats=["GIF"]) as imageObject:
# save each frame to a numpy array
for frame_num in range(0, imageObject.n_frames):
imageObject.seek(frame_num)
print("before", imageObject.mode)
frames.append(numpy.array(imageObject))
# do something with the numpy frames
for i in range(len(frames)):
# save each frame as a png to visualize
fileName = outputFileName + "_" + str(i) + ".png"
im = Image.fromarray(frames[i])
print("after", im.mode)
im.save(fileName) As for |
I've created PR #6592 to fix the |
This was immensely helpful. Thank you especially for the PR. I've tested the #6592 version of |
What did you do?
I have a four-frame transparent GIF I want to do some manipulation with (i.e. comparing frames, cropping).
![squidcat](https://user-images.githubusercontent.com/5808025/190772980-287de95d-3b75-4280-9d46-e16858017d92.gif)
I ran this code to turn each frame into an array, and saved each array as a png for visualization purposes.
What did you expect to happen?
I expected the program to generate four png files containing the four transparent frames.
What actually happened?
The first frame was completely black, with the subsequent three turning out normally. I've included my results below:
![pngcat_0](https://user-images.githubusercontent.com/5808025/190796728-bc635649-511d-4be1-8ab9-cde1f771071a.png)
![pngcat_1](https://user-images.githubusercontent.com/5808025/190796846-0ac66e01-c4ac-4672-be85-0695a3b2f5c0.png)
![pngcat_2](https://user-images.githubusercontent.com/5808025/190796959-30dd3357-e3a2-4835-96cf-fab2985da9df.png)
![pngcat_3](https://user-images.githubusercontent.com/5808025/190796425-654cc31f-fab1-4647-8afa-e431a633b825.png)
What are your OS, Python and Pillow versions?
The text was updated successfully, but these errors were encountered: