15 điểm bởi xguru 2022-02-23 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Để đặt tốc độ GIF động nhanh nhất có thể, cần đặt "Frame Delay" là "20ms" chứ không phải "10ms". Tại sao lại như vậy?
  • Từ GIF 89a, hỗ trợ ảnh động bắt đầu xuất hiện
    • Có thể đặt độ trễ cho từng khung hình
    • Thời gian chờ trước khi chuyển sang khung tiếp theo được biểu diễn theo đơn vị 1/100 giây (10ms)
    • Có thể đặt từ 0 ~ 0xffff (độ trễ khoảng 10 phút)
  • Điều gì xảy ra nếu đặt là 0? Đặc tả không đưa ra câu trả lời chính xác, nhưng có nêu rõ hai điều
    • Khi giải mã GIF, mỗi khung hình phải được xử lý không có độ trễ
    • Giá trị độ trễ chỉ được dùng khi nó khác 0
    • Nói cách khác, nếu đặt là 0 thì nó phải được xử lý như "ảnh tĩnh được kết hợp với khung trước đó"
      • Khi đó có thể chèn các khung chỉ lưu phần chuyển động để giảm kích thước
  • Vấn đề là không ai hỗ trợ độ trễ 0
    → Hầu hết các chương trình hỗ trợ GIF đều ép các giá trị từ 2 (20ms) trở xuống lên mức cao hơn
    • QT khớp với IE/FF : (delay < 2 ? 10: delay) * 10
    • Chrome khớp với FF : để ngăn các quảng cáo nhấp nháy dùng giá trị 0, các giá trị đặt từ 10ms trở xuống sẽ bị đổi thành 100ms
    • FF khớp với IE và Opera : nếu là 0~10 thì điều chỉnh thành 100ms
    • IE 5 khớp với Netscape vì Netscape chậm : nếu từ 50 trở xuống thì cố định ở 100
  • Điểm chung của các đoạn mã trên là không chỉnh 0~1 thành 2, mà chỉnh thành 10 (100ms)
    • Tức là 10 giống như 100, và 20 là nhanh nhất

Kết luận

  • Không ai đang render GIF đúng theo đặc tả, nhưng có lẽ nên làm vậy (IMO)
  • Hiện tại, để có GIF nhanh nhất thì hãy đặt 2 (20ms) thay vì 1 (10ms)
  • Nếu mọi người đều triển khai đúng đặc tả GIF
    • Có thể hỗ trợ GIF có độ trễ 10ms
    • Hỗ trợ hơn 256 màu trong một khung hình đơn của ảnh động GIF
    • Loại bỏ sự khó hiểu rằng đặt độ trễ nhỏ lại khiến nó chậm hơn
    • Có thể tạo GIF chỉ chứa vùng được cập nhật ở mỗi khung để cải thiện tỷ lệ nén

Chưa có bình luận nào.

Chưa có bình luận nào.