15P by xguru 2022-02-23 | favorite | 댓글과 토론
  • 애니 GIF 속도를 최대한 빠르게 하려면 "Frame Delay"를 "10ms"가 아닌 "20ms"로 지정해야 함. 왜 그럴까?
  • GIF 89a부터 애니메이션이 지원되기 시작
    • 각 프레임별 딜레이를 설정 가능
    • 다음 프레임으로 넘어가기 전까지 기다리는 시간을 100분의 1초(10ms)단위로 표현
    • 0 ~ 0xffff(약 10분의 딜레이) 까지 설정 가능
  • 0을 설정하면 무슨 일이 일어날까? 스펙엔 정확한 답이 없지만 두가지를 명시
    • GIF 디코딩시에 각 프레임은 딜레이 없이 처리되어야 함
    • 딜레이 값은 0이 아닐 때만 사용 됨
    • 즉, 0으로 지정하면 "이전 프레임과 결합되어 정적 이미지로 처리"되어야 함
      • 이러면 움직이는 부분만 저장한 프레임을 넣어서 크기를 줄일 수 있음
  • 문제는 누구도 0 딜레이를 지원하지 않는다는 것
    → GIF를 지원하는 대부분의 프로그램들은 2(20ms) 이하의 값을 그 이상으로 고정함
    • QT는 IE/FF와 맞춤 : (delay < 2 ? 10: delay) * 10
    • 크롬은 FF와 맞춤 : 번쩍이는 광고들이 0을 사용하는 것을 막기 위해, 10ms 이하로 지정한 것들은 100ms로 지정함
    • FF는 IE와 Opera에 맞춤 : 0~10 인 경우 100ms 로 조정함
    • IE 5는 Netscape가 느렸기 때문에 거기에 맞춤 : 50 이하의 경우는 100으로 고정
  • 위 코드들의 공통점은 0~1을 2로 맞추는게 아닌 10(100ms)으로 맞춘다는 것
    • 즉, 10은 100과 같고, 20이 가장 빠름

결론

  • 아무도 GIF 스펙대로 렌더링을 안 하고 있는데, 그렇게 해야할 것 같음(IMO)
  • 현재는 가장 빠른 GIF를 얻으려면 1(10ms) 대신 2(20ms)를 지정할 것
  • 모두가 제대로 GIF 스펙을 구현한다면
    • 10ms 딜레이짜리 GIF를 지원할 수 있게 됨
    • GIF 애니메이션 단일 프레임에서 256개 이상 색상 지원
    • 작은 딜레이 값을 주면 느려지는 혼란을 없앨 수 있음
    • 프레임당 업데이트된 영역만 있는 GIF를 만들어서 압축률을 개선할 수 있음