PNG

Một hình ảnh PNG với lớp 8-bit trong suốt (trên), được chèn vào hình nền là các ô vuông (dưới).



**PNG** (từ viết tắt trong tiếng Anh của **Portable Network Graphics**; chính thức đọc như "pinh") 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 nhằm cải thiện và thay thế định dạng ảnh GIF với một định dạng hình ảnh không đòi hỏi phải có giấy phép sáng chế khi sử dụng. PNG được hỗ trợ bởi thư viện tham chiếu **[[libpng]]**, một thư viện nền tảng độc lập bao gồm các hàm của C để quản lý các hình ảnh PNG.

Những tập tin PNG thường có phần mở rộng là `PNG` và `png` đã được gán kiểu chuẩn MIME là `image/png` (được công nhận vào ngày 14 tháng 10 năm 1996).

## Lịch sử và phát triển

Động cơ thúc đẩy cho việc tạo ra định dạng PNG bắt đầu vào khoảng đầu năm 1995, sau khi Unisys công bố họ sẽ áp dụng bằng sáng chế vào thuật toán nén dữ liệu LZW- được sử dụng trong định dạng GIF. Thuật toán được bảo vệ bởi bằng công nhận độc quyền sáng tạo ở trong nước Mỹ và tất cả các nước trên thế giới. Tuy nhiên, cũng đã có một số vấn đề với định dạng GIF khi cần có một số thay đổi trên hình ảnh, nhất giới hạn của nó là 256 màu trong thời điểm máy tính có khả năng hiển thị nhiều hơn 256 màu đang trở nên phổ biến. Mặc dù định dạng GIF có thể thể hiện các hình ảnh động, song *PNG* vẫn được quyết định là định dạng hình ảnh đơn (chỉ có một hình duy nhất). Một người "anh em" của nó là MNG đã được tạo ra để giải quyết vấn đề ảnh động. PNG lại tăng thêm sự phổ biến của nó vào tháng 8 năm 1999, sau khi hãng Unisys huỷ bỏ giấy phép của họ đối với các lập trình viên phần mềm miễn phí, và phi thương mại.

* Phiên bản 1.0 của đặc tả PNG được phát hành vào ngày 1 tháng 7 năm 1996, và sau đó xuất hiện vơi tư cách RFC 2083. Nó được tổ chức W3C khuyến nghị vào ngày 1 tháng 10 năm 1996.
* Phiên bản 1.1, với một số thay đổi nhỏ và thêm vào 3 thành phần mới, được phát hành vào ngày 31 tháng 12 năm 1998.
* Phiên bản 1.2, thêm vào một thành phần mở rộng, được phát hành vào ngày 11 tháng 8 năm 1999.
* PNG giờ đây là một chuẩn quốc tế (ISO/IEC 15948:2003), và cũng được công bố như một khuyến nghị của W3C vào ngày 10 tháng 11 năm 2003. Phiên bản hiện tại của PNG chỉ khác chút ít so với phiên bản 1.2 và không có thêm thành phần mới nào.

## Thông tin kỹ thuật

### Phần đầu của tập tin
Một tập tin PNG bao gồm 8-byte ký hiệu (89 50 4E 47 0D 0A 1A 0A được viết trong hệ thống có cơ số 16, chứa các chữ "PNG" và 2 dấu xuống dòng http://www.libpng.org/pub/png/spec/1.1/PNG-Rationale.html#R.PNG-file-signature, ở giữa là sắp xếp theo số lượng của các *thành phần*, mỗi thành phần đều chứa thông tin về hình ảnh. Cấu trúc dựa trên các thành phần được thiết kế cho phép định dạng PNG có thể tương thích với các phiên bản cũ khi sử dụng.

### Các "thành phần" trong tập tin

PNG là cấu trúc như một chuỗi các thành phần, mỗi thành phần chứa kích thước, kiểu, dữ liệu, và mã sửa lỗi CRC ngay trong nó.

Chuỗi được gán tên bằng 4 chữ cái phân biệt chữ hoa chữ thường. Sự phân biệt này giúp bộ giải mã phát hiện bản chất của chuỗi khi nó không nhận dạng được.

Với chữ cái đầu, viết hoa thể hiện chuỗi này là thiết yếu, nếu không thì ít cần thiết hơn ancillary. Chuỗi thiết yếu chứa thông tin cần thiết để đọc được tệp và nếu bộ giải mã không nhận dạng được chuỗi thiết yếu, việc đọc tệp phải được hủy.

#### Thành phần cơ bản
Một bộ giải mã (decoder) phải có thể thông dịch để đọc và hiển thị một tệp PNG.
* IHDR phải là thành phần đầu tiên, nó chứa đựng header
* PLTE chứa đựng bảng màu (danh sách các màu)
* IDAT chứa đựng ảnh. Ảnh này có thể được chia nhỏ chứa trong nhiều phần IDAT. Điều này làm tăng kích cỡ của tệp lên một ít nhưng nó làm cho việc phát sinh ảnh PNG mượt hơn (streaming manner).
* IEND đánh dấu điểm kết thúc của ảnh.

### Ảnh động
PNG không hỗ trợ ảnh động. Nhưng một định dạng khác phức tạp hơn dựa trên ý tưởng và các chunk của PNG là MNG được thiết kế cho ảnh động, tuy nhiên định dạng này không cho phép 'tương thích lùi' tức là hiển thị một ảnh trong trường hợp hệ thống không hỗ trợ được hình động. Một định dạng khác là APNG cũng dựa trên PNG hỗ trợ ảnh động và tương thích lùi, nhưng đơn giản hơn MNG. Tuy nhiên, đến thời điểm 2005 những định dạng này vẫn chưa được hỗ trợ rộng rãi

## Tham khảo

## Liên kết ngoài

### libpng.org
* PNG Home Site
* libpng Home Page
* PNG-supporting browsers - overview of PNG status in different web browsers. First Windows IE support in 4.0b1; Netscape 4.04 http://oregon.usgs.gov/png_images.html .
* ''The Story of PNG'' by Greg Roelofs
* ''PNG: The Definitive Guide (Online Version)'' by Greg Roelofs

### W3C
* PNG Specification (Second Edition), W3C Recommendation ngày 10 tháng 11 năm 2003
* Test inline PNG images

### Các trang khác
* RFC 2083
* PNG transparency test
* Transparent PNG Generator
* The GD-library to generate dynamic PNG-files with PHP
* A guide to PNG optimization
* PNG as a future proof format 
* PNG Adam7 interlacing
* List of PNG-related resources, libraries and papers 
* PNG Files Do Not Show Transparency in Internet Explorer
* The PNG problem in Windows Internet Explorer 
* png transparency in IE