PicScrub logoPicScrub
Quay lại danh sách định dạng

Định dạng GIF

Graphics Interchange Format

Cấu trúc theo khối

GIF là một trong những định dạng sống dai hơn dự đoán tới mấy chục năm. Ra đời năm 1987 do CompuServe tạo ra, tới giờ nó vẫn có mặt khắp nơi, chủ yếu nhờ khả năng làm ảnh động.

Định dạng này dùng cấu trúc theo khối, đơn giản đến mức dễ chịu nếu so với các định dạng hiện đại. Một phần đầu file, vài khối mô tả, một bảng màu, dữ liệu ảnh của bạn, và một byte cuối cùng để nói "hết rồi".

Cấu trúc file GIF

Header
LSD
GCT
Extensions
Image Data
Trailer
Header
6 byte
GIF87a hoặc GIF89a
LSD
7 byte
Logical Screen Descriptor
GCT
768 byte
Bảng màu toàn cục (tùy chọn)
Extensions
100 byte
Các khối extension (siêu dữ liệu)
Image Data
Độ dài thay đổi
Khối mô tả ảnh + dữ liệu LZW
Trailer
1 byte
Byte kết thúc 0x3B

Phần đầu file GIF

Chữ ký GIF
Phiên bản (89a)
Chiều rộng (640)
Chiều cao (480)
Các trường gộp bit
Chỉ mục màu nền
Tỉ lệ điểm ảnh
OffsetHexASCII
0000
4749463839618002E001F70000
GIF89a.......

Khác biệt giữa hai phiên bản

GIF87a

Bản gốc. Chưa có khối extension.

GIF89a

Thêm extension, ảnh động và độ trong suốt.

Các khối extension

GIF89a (bản sửa đổi năm 1989) thêm các khối extension, và đó chính là cách GIF có được ảnh động. Mọi khối extension đều bắt đầu bằng 0x21 rồi tới một byte kiểu, nên rất dễ nhận ra khi bạn dò qua file. Một số khối chúng ta muốn giữ (nhịp ảnh động), số khác thì muốn xóa (chú thích).

Graphic Control Extension (0xF9)

Điều khiển nhịp ảnh động, độ trong suốt và cách xử lý khung cũ. Nằm ngay trước mỗi khối mô tả ảnh trong GIF động. Luôn được giữ lại.

21 F9 04 [disposal] [delay] [transparent] 00

Comment Extension (0xFE)

Chú thích dạng văn bản thuần. Có thể chứa bất cứ thứ gì, kể cả tác giả, ngày tạo, phần mềm hay ghi chú cá nhân. PicScrub xóa khối này.

21 FE [size] [comment data...] 00

Application Extension (0xFF)

Dữ liệu riêng của từng ứng dụng. Quan trọng nhất là NETSCAPE2.0 dùng để lặp ảnh động. Cũng có thể chứa siêu dữ liệu XMP.

21 FF 0B [app identifier] [auth code] [data...] 00

Plain Text Extension (0x01)

Hiếm khi được dùng. Vẽ chữ bằng bảng màu của GIF. Phần mềm hiện nay hầu như đều bỏ qua.

Các khối Application Extension

NETSCAPE2.0:vòng lặp ảnh động

Quyết định GIF động lặp lại bao nhiêu lần. Giá trị 0 nghĩa là lặp vô hạn.

Mở đầu extension
Kích thước khối (11)
NETSCAPE2.0
Kích thước khối con
ID khối con
Số lần lặp
Byte kết thúc
OffsetHexASCII
0000
21FF0B4E45545343415045322E300301000000
!..NETSCAPE2.0.....

PicScrub giữ lại NETSCAPE2.0 để ảnh động chạy đúng như cũ.

XMP Data:Extensible Metadata Platform

Định danh ứng dụng: XMP DataXMP. Chứa toàn bộ siêu dữ liệu XMP/RDF ở dạng XML.

PicScrub xóa các khối application extension chứa XMP.

Giữ nguyên ảnh động

Chỗ khó với GIF là phải phân biệt được dữ liệu ảnh động (cần giữ) với siêu dữ liệu (cần xóa). Cả hai đều nằm trong các khối extension, nên không thể cứ thế xóa sạch mọi extension.

Giữ lại cho ảnh động

  • • Số lần lặp NETSCAPE2.0
  • • Các khối Graphic Control Extension
  • • Độ trễ giữa các khung
  • • Cách xử lý khung cũ
  • • Chỉ mục màu trong suốt
  • • Bảng màu cục bộ

Bị xóa

  • • Khối chú thích
  • • Khối application chứa XMP
  • • Khối application lạ không nhận diện được
  • • Khối plain text

PicScrub xử lý GIF như thế nào

1

Kiểm tra phần đầu file

Xác nhận chữ ký GIF87a hoặc GIF89a

2

Chép phần đầu file

Giữ nguyên LSD và bảng màu toàn cục

3

Lọc các extension

Giữ NETSCAPE2.0 và Graphic Control, xóa Comment và XMP

4

Giữ nguyên dữ liệu ảnh

Chép nguyên xi toàn bộ khối mô tả ảnh, bảng màu cục bộ và dữ liệu LZW

5

Ghi byte kết thúc

Kết thúc file bằng byte 0x3B

Nén LZW

Nói nhanh về dữ liệu ảnh của GIF: nó dùng nén LZW, thứ từng được cấp bằng sáng chế tới tận năm 2004 (gây ra bao nhiêu chuyện ầm ĩ hồi thập niên 90). PicScrub không hề đụng tới phần dữ liệu đã nén. Chúng tôi chép nguyên xi từng byte, nghĩa là chất lượng không suy giảm chút nào.

Vì sao điều này quan trọng

Nhờ giữ nguyên dữ liệu LZW gốc, PicScrub bảo đảm:

  • • Không mất chất lượng (ảnh giữ nguyên tới từng bit)
  • • Xử lý nhanh (không phải giải nén rồi nén lại)
  • • Phần dữ liệu ảnh giữ nguyên dung lượng

Giới hạn siêu dữ liệu của GIF

Tin tốt về GIF là nó ra đời trước chuẩn EXIF, nên không có tọa độ GPS hay thông tin máy ảnh nào để phải lo. Những mối lo về siêu dữ liệu ở đây bình dân hơn nhiều.

Những gì có thể lọt ra ngoài

So với JPEG, rủi ro riêng tư của GIF khá nhỏ:

  • • Khối chú thích (đôi khi có ghi chú của tác giả)
  • • Siêu dữ liệu XMP (hiếm, nhưng vẫn có thể)
  • • Tên phần mềm trong các khối application