[Python] Pillow에서 애니메이션 GIF의 크기 조정
01. 절차
from PIL import Image
# アニメーションGIFを読み込む
image = Image.open("sample.gif")
# 幅と高さを取得
width, height = image.size
# アニメーションの各フレームをリサイズしてリストに格納
resize_image_list = []
for index in range(image.n_frames):
image.seek(index)
resize_image_list.append(image.resize((width // 2, height // 2)))
# アニメーションGIFとして書き出し
resize_image_list[0].save(
"resize_sample.gif",
save_all=True,
append_images=resize_image_list[1:],
loop=0,
)
02. 해설
02-01.파일 형식
보충 설명을 좀 쓰겠습니다.
애니메이션 GIF는 Pillow로 열면 "PIL.GifImagePlugin.GifImageFile"형식으로 읽습니다. ※jpg와 bmp 등은 "PIL.Image.Image"
image = Image.open("sample.gif")
print(image)
<PIL.GifImagePlugin.GifImageFile image mode=P size=200x113 at 0x29888A333D0>
"PIL.GifImagePlugin.GifImageFile"은 여러 "PIL.Image.Image"가 포함된 형식입니다. n프레임 참조를 통해 장수를 확인할 수 있습니다.print(image.n_frames)
50
tell()를 사용하면 현재 참고할 프레임 인덱스를 얻을 수 있습니다.읽기 상태는 첫 번째 프레임이므로 0입니다.
print(image.tell())
0
seek()를 사용하면 참고 프레임을 변경할 수 있습니다.image.seek(20)
print(image.tell())
20
이미지에 액세스한 후 참조 프레임을 "PIL.Image.Image"로 처리합니다.resize_image = image.resize((100, 100))
print(resize_image)
<PIL.Image.Image image mode=P size=100x100 at 0x1BD415F7F10>
애니메이션 GIF 읽기이렇게 처리하면 첫 번째 프레임만 처리하면 애니메이션이 아니다.
image = Image.open("sample.gif")
print(image.tell())
print(image)
resize_image = image.resize((100, 100))
print(resize_image)
0
<PIL.GifImagePlugin.GifImageFile image mode=P size=200x113 at 0x29888A333D0>
<PIL.Image.Image image mode=P size=100x100 at 0x1BD415F7F10>
02-02.크기 조정
애니메이션 GIF의 크기를 조정하려면 프레임을 다룹니다.
# 幅と高さを取得
width, height = image.size
# アニメーションの各フレームをリサイズしてリストに格納
resize_image_list = []
for index in range(image.n_frames):
image.seek(index)
resize_image_list.append(image.resize((width // 2, height // 2)))
02-03.보존
애니메이션 GIF로 다시 저장합니다.
첫 번째 프레임에save()를 사용하고 end를 적용합니다 -이미지 옵션을 사용하여 나머지 프레임을 지정합니다.
save_모든 그림을 all로 저장하고 loop으로 애니메이션 순환 횟수를 지정합니다 (0은 무한 순환)
자세한 내용은 공식 문서에서 →Image file formats — Pillow (PIL Fork) documentation
# アニメーションGIFとして書き出し
resize_image_list[0].save(
"resize_sample.gif",
save_all=True,
append_images=resize_image_list[1:],
loop=0,
)
보충:완성된 GIF가 잘 표시되지 않을 때는 False를 통해 최적화 옵션(optimize)을 표시하는 경우도 있다.
# アニメーションGIFとして書き出し
resize_image_list[0].save(
"resize_sample.gif",
save_all=True,
append_images=resize_image_list[1:],
loop=0,
optimize=False,
)
이상.
Reference
이 문제에 관하여([Python] Pillow에서 애니메이션 GIF의 크기 조정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kazuhito/articles/997fac889d41d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)