in

LoveLove

PNG và JPG format

1. PNG

PNG (từ viết tắt trong tiếng Anh của Portable Network Graphics), là một dạng hình ảnh sử dụng phương pháp nén dữ liệu mới – không làm mất đi dữ liệu gốc. PNG được tạo ra để thay thế cho định dạng ảnh GIF, vốn là định dạng nén ảnh lossless được sử dụng rộng rãi nhất trên Internet.

1.1. Tổng quan

  • PNG là định dạng ảnh nén bảo toàn được dữ liệu (lossless).
  • Cấu trúc chung:

Untitled.png

  • Bắt đầu bằng 8 byte signature: 89 50 4E 47 0D 0A 1A 0A.

Untitled

1.2. Cấu trúc

  • Sau phần signature là các đoạn (được gọi là “chunk”) lưu trữ từng phần dữ liệu của ảnh. Mỗi chunk được có thể là quan trọng (Critical)  hoặc phụ trợ (Ancillary). Chương trình có thể nhận biết để bỏ qua đoạn phụ trợ này nếu không thể đọc được.
  • Cấu trúc của mỗi chunk gồm 4 phần: độ dài (4 bytes), loại (4 bytes), dữ liệu, CRC checksum (4 bytes).

Untitled.png

Untitled.png

Untitled.png

1.2.1. Các khối quan trọng

  • IHDR: Là đoạn đầu tiên; nó chứa theo thứ tự: chiều rộng của hình ảnh (4 byte), chiều cao (4 byte), độ sâu bit (1 byte), loại màu (1 byte), phương pháp nén (1 byte), phương pháp lọc (1 byte) và phương pháp xen kẽ (1 byte) (tổng số 13 byte dữ liệu).

Untitled

  • PLTE: Chứa bảng màu hay danh sách các màu sắc

Untitled.png

  • IDAT: Chứa hình ảnh, có thể được chia thành nhiều phần IDAT. Mỗi đoạn IDAT chứa dữ liệu hình ảnh thực tế, là output của thuật toán nén

Untitled.png

  • IEND: Đánh dấu kết thúc

Untitled

1.2.2. Các khối phụ trợ

  • Dùng để lưu trữ các giá trị gamma, màu nền và thông tin meta data.

1.3. Định dạng pixel

Untitled.png

  • Các pixel trong PNG là tập các số nguyên, được lấy từ bảng màu. Bảng màu là một bảng riêng biệt chứa trong đoạn PLTE. Mỗi pixel bao gồm một tập gồm từ 1 đến 4 số tùy vào số kênh.
  • Số lượng kênh phụ thuộc vào ảnh là ảnh màu xám hay ảnh màu, và có kênh alpha hay không.

Untitled.png

Untitled.png

1.4. Các thuật toán

1.4.1. Filtering

  • Sử dụng phương pháp lọc bằng dự đoán (ký hiệu method 0). Bộ lọc dự đoán giá trị của từng pixel dựa trên giá trị của các pixel lân cận trước đó và trừ đi màu được dự đoán của pixel từ giá trị thực.
  • Có 5 loại bộ lọc cho method 0:

Untitled.png

Untitled.png

1.4.2. Compression

1.4.3. Interlacing

  • Sử dụng thuật toán Adam7.

1.5. Vấn đề kích thước file

  • Các tệp PNG có kích thước khác nhau do một số yếu tố:
    • Độ sâu màu: có thể dao động từ 1 đến 64 bit trên mỗi pixel.
    • Khối phụ trợ.
    • PNG hỗ trợ meta data.
    • Interlacing: mỗi lần vượt qua thuật toán Adam7 được lọc riêng nên có thể tăng kích thước file.
    • Filtering và compression.

2. JPG

JPG hay JPEG (tiếng Anh, viết tắt cho Joint Photographic Experts Group) là một trong những phương pháp nén ảnh lossy hiệu quả, có tỷ lệ nén ảnh tới vài chục lần. Tuy nhiên ảnh sau khi giải nén sẽ khác với ảnh ban đầu, chất lượng ảnh bị suy giảm sau khi giải nén.

2.1. Tổng quan

  • JPEG là định dạng ảnh nén mất dữ liệu (lossy), một số đường bao giữa các khối màu sẽ xuất hiện điểm mờ, và các vùng sẽ mất đi sự rõ nét. JPEG sẽ không thể phục hồi giống như hình ảnh ban đầu dù dung lượng được tăng lên giống dung lượng ảnh thật.
  • Cấu trúc chung:

Untitled.png

  • Bắt đầu bằng 3 byte signature: FF D8 FF

Untitled.png

  • Các ảnh JPEG không thể làm trong suốt hoặc chuyển động

2.2. Cấu trúc

  • Ảnh JPEG bao gồm các đoạn (segments), mỗi đoạn bắt đầu với một điểm đánh dấu (marker). Mỗi marker bắt đầu bằng 1 byte 0xFF, theo sau là 1 byte cho biết loại marker.

Untitled.png

Untitled.png

  • Theo sau mỗi marker là 2 byte cho biết chiều dài của dữ liệu trong segment.

Untitled.png

2.3. Thuật toán mã hóa

  • Có nhiều cách để mã hóa ảnh JPEG, thông thường nhất là mã hóa JFIF.

Untitled.png

  • Các bước:
    • Chuyển đổi từ RGB thành YCbCr. Không gian màu YCbCr bao gồm một thành phần luma (Y) đại diện cho độ sáng, và hai thành phần (Cb và Cr) đại diện cho màu sắc.
    • Độ phân giải của dữ liệu màu sắc được giảm, thường bằng hệ số 2 hoặc 3, do thực tế mắt ít nhạy cảm với chi tiết màu sắc hơn là với độ sáng.
    • Hình ảnh được chia thành các khối 8 × 8 pixel. Trong mỗi khối, mỗi dữ liệu Y, Cb, Cr trải qua phép biển đổi DCT (Discrete cosine transform).
    • Lượng tử hóa biên độ của các thành phần, chi tiết: Quantization
    • Dữ liệu kết quả được nén bằng một thuật toán không mất dữ liệu, là 1 biến thể của mã hóa Huffman.
  • Quá trình giải mã đảo ngược các bước mã hóa trên, ngoại trừ bước lượng tử hóa bởi vì nó không thể đảo ngược.

3. Tham khảo

What do you think?

4 points
Upvote Downvote
Notice: compact(): Undefined variable: limits in /var/www/html/wp-includes/class-wp-comment-query.php on line 853

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Loading…

0

Comments

0 comments

Những trang web học lập trình online tốt nhất hiện nay