Pillow(PIL)로 생성하는 gif의 화질을 올린다

단도직입


im.quantize() 그냥

소개



Python 이미지 처리 라이브러리의 Pillow를 사용하면 gif 애니메이션을 쉽게 만들 수 있습니다.
자세한 것은 모두 사랑해 의. 응 kmk. 눈 에 양보합니다만 , 적당하게 화상을 몇장 열어 옵션을 결정하는 것뿐입니다.

makegif.py
from PIL import Image

im1 = Image.open("hoge.png")
im2 = Image.open("huga.png")
images = [im1, im2]
images[0].save('test.gif', save_all=True,
               append_images=images[1:], optimize=False, duration=500, loop=0)



즐거운 애니메이션이 생겼습니다.

사진의 경우



그렇다면, 말하기와 같은 간단한 일러스트가 아니라 사진에서도 시도합시다.


감시 카메라를 통해 본 것 같은 심한 화질이 되어 버렸습니다.
왜…

*추기
스마트폰에서 보면 그렇게 화질이 나쁘지 않은 것처럼 보일지도 모릅니다.
PC로부터라면 상당히 혹독함을 알 수 있습니다. (추기 끝)

gif 제한 및 회피



2색 흑백에서 16777216색(=224) 중 256색(=28)까지의 색 지원


그랬어요. 옛날부터 나를 즐겁게 해주고 있던 gif들은 256색의 제한 속에서 싸우고 있던 것 같습니다.
그러나 이것은 곤란합니다. 라고 할까 가비가비가 아닌 사진의 gif도 본 적이 있는 것 같습니다.

조사해 보면 다음과 같은 설명을 발견했습니다. (Deepl 번역에 조금 추가)

또 다른 방법은 "양자화(the quantize method)"입니다. 현재 멀티 프레임 GIF를 만들 때 Pillow는 웹 팔레트를 사용하여 이미지를 변환하고 있습니다. 양자화를 사용하여 이미지를 먼저 P로 되돌리는 것이 사용되는 정확한 색상을 더 잘 표현할 수 있는 것처럼 보입니다.
htps : // 기주 b. 코 m / py 텐 - 핏 w / 핏 w / 이스에 s / 3660

지금 핀과 오지 않지만 Pillow에서 열린 이미지에 .quantize()하는 것으로 좋은 느낌이 될 것 같습니다.
해보자.

makegif.py
from PIL import Image

im1 = Image.open("gohan1.jpg").quantize()
im2 = Image.open("gohan2.jpg").quantize()
im3 = Image.open("gohan3.jpg").quantize()
images = [im1, im2, im3]
images[0].save('test2.gif', save_all=True,
               append_images=images[1:], optimize=False, duration=800, loop=0)


! ! !
맛있을 것 같습니다! 이것이라면 먹을 수 있습니다! !

무슨 일이야?



Pillow의 quantize에 의해, 밥의 이미지를 256색까지 좋은 느낌으로 감색했습니다.

이번은 디폴트인 채이므로, 메디안컷(option=0)이라고 하는 방법으로 감색된 것 같습니다.
그 밖에도 maximum coverage, fast octree의 방법을 선택할 수 있는 것 같습니다. (libimagequant라는 방법도있는 것 같습니다만, 실행할 수 없었습니다)

각각을 비교해 봅시다.


maximum coverage의 열화가 심합니다. 그 외 2개는 꽤 비슷합니다만, 앞의 백반을 보면 약간 fast octree 쪽이 잘 감색되어 있다고 생각합니다.

요약



Pillow에서 gif가 보케했을 때는 우선 quantize!

좋은 웹페이지 즐겨찾기