Pytohon GIF 파일 읽기 및 쓰기 편집 및 한번(PIL/Pillow)
코끼리
파이톤으로 GIF 파일을 만들고 싶어요.제작하고도 읽고 싶은데 살짝 편집해 볼게요.
내용:
GIF 파일 저장하기
img1.save('ファイル名.gif', save_all=True, append_images=[img2, img3, ...])
1. image.save(fp, format=None, **params)
함수는 일반 이미지와 같은 image.save()
를 사용합니다.2. 파일 이름 저장
***.gif
save()
저장된 파일 이름의 확장자로 파일 형식을 판단할 수 있습니다.format을 사용하여 명시적으로 지정할 수도 있습니다.저장할 때 파일 이름***.gif
이면 된다는 뜻이다.image.save('sample.png') # 拡張子から png ファイルと認識
image.save('sample.gif') # 拡張子から gif ファイルと認識
3. 매개 변수save_all
,append_images
GIF 애니메이션에 여러 이미지를 저장하기 위해 매개변수를 추가로 지정합니다.매개 변수
반드시... 해야 한다
설명
save_all
✓
True.모든 프레임을 저장할 지 여부입니다.
append_images
✓
목록에서 두 번째 프레임 이후의 프레임을 전달합니다.
duration
GIF가 재생성될 때의 프레임 간격입니다.밀리초.
loop
GIF가 재생성될 때의 주기 횟수입니다.0곳에서 무한 순환.
* 추가 매개변수공식:GIF 파일 저장 옵션
최소한
save_all
,append_images
이 필요하며 최초 이외의 프레임append_images
을 추가하는 동시에 최초 프레임을 일반적인 이미지처럼 저장합니다.샘플 코드:
from PIL import Image
sample_image = Image.open('sample.jpg')
# transpose: 画像を反転や回転する関数
# https://pillow.readthedocs.io/en/3.1.x/reference/Image.html#PIL.Image.Image.transpose
image2 = sample_image.transpose(Image.ROTATE_90)
image3 = sample_image.transpose(Image.ROTATE_180)
image4 = sample_image.transpose(Image.ROTATE_270)
sample_image.save(
'sample_rotation.gif',
save_all=True,
append_images=[image2, image3, image4],
duration=500, # 各フレーム 0.5sec
loop=0, # 無限ループ
)
샘플 코드 저장 결과GIF 파일 읽기
일반적인 이미지와 마찬가지로
Image.open()
읽을 수 있으며, 이것만 GIF 파일 PIL.GifImagePlugin.GifImageFile
클래스로 읽을 수 있습니다.from PIL import Image
image = Image.open('sample.gif')
print(type(image))
<class 'PIL.GifImagePlugin.GifImageFile'>
그러나 이 플러그인의 함수는 완비되지 않은 것 같습니다. 재단을 하거나 일반적인 함수를 사용하면 클래스는 자동으로 일반적인 이미지 데이터로 변하고 첫 번째 프레임의 데이터로 변합니다.GIF 파일로 읽는 것을 깨닫지 못하면 의외로 걸려 넘어진다.
from PIL import Image
image = Image.open('sample.gif')
print(type(image))
# 通常の関数を適用
image2 = image.copy()
print(type(image2))
image3 = image.crop((0, 0, 100, 100))
print(type(image3))
<class 'PIL.GifImagePlugin.GifImageFile'>
<class 'PIL.Image.Image'> # 普通の Image オブジェクト(他フレームのデータが消える)
<class 'PIL.Image.Image'>
★클래스의 계층 구조는 그림과 같다.PIL.GifImagePlugin.GifImageFile
도 일반 함수를 응용할 수 있다.읽은 GIF 데이터 처리
GifImageFile은 다음 그림과 같이 여러 이미지를 저장하는 토대에서 포인터가 프레임을 가리키는 데이터 형식을 사용했다.
따라서 기본적으로 GIF 데이터를 편집하려는 경우
image.seek()
GifImageFile 클래스별 함수 모음
이름:
설명
seek(index)
참조 프레임을 색인 위치로 변경합니다.
tell()
현재 참조한 프레임의 위치를 반환합니다.
n_frames
예약된 GIF 파일의 프레임 수
* 기타 공식.
자습서 불러오기 및 잘라내기 저장
위의 내용에 따라 다음과 같은 절차가 된다.
from PIL import Image
image = Image.open('sample.gif')
cropped_images = []
crop_box = (400, 0, 700, 300)
for index in range(image.n_frames):
image.seek(index) # ここで image が参照しているフレームが変わっている
cropped = image.crop(crop_box)
cropped_images.append(cropped)
# 初期フレームに残りのフレームを追加するように保存
cropped_images[0].save(
'sample_cropped.gif',
save_all=True,
append_images=cropped_images[1:],
duration=500,
loop=0,
)
결과 1왼쪽은 원래 GIF 이미지, 오른쪽은 잘린 GIF 이미지입니다.느낌이 좋다.(기존 GIF 데이터는여기 기사.입니다.)
PIL의 GIF 플러그인은 GIF 파일로 저장할 때 이미지가 나빠지거나 가상이 생기는 등 완비되지 않은 느낌을 준다.저장할 때 PIL이 자동으로 작동하는optimize는False를 통해 치유할 수 있고, 먼저 RGBA에서 convert를 한 후optimize=False를 통해 치유하는 경우도 있다.
Reference
이 문제에 관하여(Pytohon GIF 파일 읽기 및 쓰기 편집 및 한번(PIL/Pillow)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Takarasawa_/items/3ea20afe6b49ad013bec텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)