Chúng ta thường nghe đến việc nén file. Đối với những ai thường xuyên tải file từ trên web thì sẽ rất quen thuộc với các định dạng ZIP hoặc RAR. Và với những ai chỉnh sửa file media đều biết rằng nén là phương thức hữu hiệu để chia sẻ hình ảnh, nhạc và video trên web mà không cần sử dụng hết băng thông. Vì thế, có thể khẳng định rằng nén tập tin là điểm cốt lõi của các hoạt động web, bạn có thể phản đối rằng file lớn hơn vẫn có thể chia sẻ trên web, đúng rồi, nhưng nó mất quá nhiều thời gian, đúng không?
Vậy cơ chế hoạt động của cấc công cụ nén file như thế nào?
Nén file không phải là một phép màu, nhưng nó cũng là kết quả của việc nghiên cứu, làm việc miệt mài của rất nhiều tài năng trong nhiều năm trời. Có hai dạng nén file chính là nén không làm giảm chất lượng hay nén không tổn hao (lossless) và nén làm giảm chất lượng hay nén có tổn hao (lossy).
Trong bài viết này, chúng tôi sẽ cố gắng đơn giản hóa mọi thứ để bạn có thể hiểu được cơ chế nén, nếu muốn tìm hiểu về các thuật toán nén file chi tiết bạn nên tìm chúng trên Wikipedia và các trang web được liên kết đến đó.
Nén không làm giảm chất lượng
Cơ bản, nén lossless hoạt động bằng cách loại bỏ phần dư thừa. Để bạn dễ hình dung nhất hãy nhìn vào chồng gạch này:
Như bạn thấy, chúng ta có 2 viên gạch đỏ, 5 gạch vàng và 3 xanh. Cách đơn giản nhất để hiển thị những viên gạch này là giống như ở trên, "show" hết ra. Nhưng đó không phải là cách duy nhất để làm điều đó. Bạn có thể biến chúng thành như thế này:
Trong hình trên, bạn có thể thấy chính xác thông tin - hai viên gạch màu đỏ, năm màu vàng và ba màu xanh - nhưng nó chiếm ít không gian hơn. Trong cách này bạn đã thay những viên gạch giống nhau, dư thừa bằng cách sử dụng những con số, nhờ đó 3 viên gạch có thể biểu thị được 10 viên gạch.
Ví dụ này đã giúp bạn có cái nhìn sơ qua về nén lossless. Thông tin dư thừa được thay thế nhờ vào những hướng dẫn chỉ ra cho máy tính có bao nhiêu dữ liệu đồng dạng bị lặp lại. Thêm một ví dụ nữa:
f f f f f f f u u u u u u u u u u u u
Có thể được nén như sau:
f7u12
Đó chỉ là một phương thức của nén lossless. Một vài thuật toán khác đã được sử dụng, nhưng điều cần nhớ về nén lossless là không gian dành cho file chỉ tạm thời giảm đi và hoàn toàn có thể tái tạo tập tin gốc từ tập tin nén. Ở ví dụ trên, với ba viên gạch được đánh số, bạn biết chính xác chồng gạch được tạo ra bởi bao nhiêu viên. Không có thông tin gì bị mất đi ở đây cả, giống như cái tên của nó vậy.
Những chương trình giống như WinZip đều sử dụng phương thức nén không làm giảm chất lượng. Chúng loại bỏ thông tin dư thừa này khi bạn nén (hoặc "zip") tập tin và khôi phục lại nó khi bạn giải nén (hoặc "unzip"). Không có gì bị mất.
Đối với hình ảnh, tập tin PNG cũng sử dụng phương thức nén này. Đó là lý do vì sao hình ảnh có dung lượng nhỏ hơn nhưng không làm giảm kích thước, các thông tin dư thừa được biểu diễn bằng cách sử dụng hướng dẫn.
Tất nhiên, đây chỉ là một cách đơn giản hóa vấn đề nhưng vẫn giữ được nguyên lý cơ bản của cơ chế nén không tổn hao. Nếu bạn muốn tìm hiểu sâu hơn hãy đọc trên Wiki và sử dụng phiên bản tiếng Anh để có được mô tả đúng kiểu chuyên gia.
Nén làm giảm chất lượng
Đối lập với nén không làm giảm chất lượng là nén làm giảm chất lượng. Cơ chế nén này loại bỏ đi những thông tin dư thừa, rườm ra. Trên máy tính của bạn chắc chắn có khá nhiều file sử dụng cơ chế nén này đấy.
Lấy MP3 làm ví dụ. Như bao người khác bạn lưu hàng ngàn tập tin MP3 trong máy tính. Nhưng bạn có biết rằng chúng không chứa tất cả thông tin audio giống như khi được thu âm? Một số âm thanh (con người có thể hoặc không thể nghe thấy) đã bị loại bỏ trong khi nén. Bạn càng nén một file nhiều thì thông tin bị loại bỏ càng lớn. Đó là nguyên nhân vì sao khi tập tin bị nén quá nhiều thì âm thanh sẽ kém hơn.
Nén lossy được sử dụng nhiều trong tập tin đa phương tiện như ảnh, nhạc, video, vì không phải lúc những file này cũng cần lưu trữ đủ thông tin gốc. Nhưng nếu sử dụng nén lossy cho tập tin văn bản sẽ có vấn đề, bởi file sau khi nén có nhiều thông tin bị cắt xén.
Một ví dụ khác về nén làm giảm chất lượng, đó là dịnh dạng ảnh JPEG. Nói chung, hình ảnh xem trên web không cần thiết phải có chất lượng cao như ảnh dùng cho in ấn. Bởi vậy, bạn có thể bỏ rất nhiều những thông tin dự phòng cho ảnh web, dù cho khi in ra chúng trông rất tệ.
Tất nhiên, nén đi nén lại một tập tin với cơ chế nén lossy sẽ làm giảm chất lượng vì mỗi lần làm vậy thì nhiều dữ liệu mất đi hơn. Dưới đây là một bức ảnh, tôi đã nén nó lại ba lần, kết quả là đây:
Bạn có thể thấy từ bên trái sang bên phải chất lượng giảm như thế nào. Điều này có thể không quan trọng, tùy thuộc vào mục đích sử dụng hình ảnh, và đó là lý do tại sao nén lossy tồn tại.
Điều cần nhớ, phương pháp nén lossy thực sự làm mất dữ liệu, vì vậy bạn sẽ không thể khôi phục được tập tin gốc từ file nén. Hãy suy nghĩ thật kỹ trước khi sử dụng. Nhiều dự án in ấn đã bị hủy bởi sự thiếu hiểu biết về vấn đề này.
Điều quan trọng cần nhớ là các tệp nén bằng cách sử dụng phương pháp nén tổn hao thực sự bị mất dữ liệu, có nghĩa là bạn không thể tạo lại file gốc từ file đã nén. Hãy cân nhắc phương pháp nén để không làm nhỡ việc của mình.
Đây chỉ là cách đơn giản hóa để bạn hiểu vấn đề nhanh hơn, nhưng nếu vẫn chưa thỏa mãn bạn hãy đọc thêm tại đây: https://en.wikipedia.org/wiki/Lossy_compression nó thực sự rất hấp dẫn và thú vị.
Kết luận
Việc nén file là một phần trong hoạt động hàng ngày của người dùng máy tính và Internet, nén giúp cho thời gian tải một trang web, file nhanh hơn và dễ dàng để chia sẻ file với bạn bè.
Hy vọng bài viết này giúp các bạn hiểu được phần nào về cơ chế nén file.
Xem thêm: