Nếu tôi chuyển đổi hình ảnh (jpg hoặc png) thành base64, thì nó sẽ lớn hơn hoặc nó sẽ có cùng kích thước? Nó sẽ lớn hơn bao nhiêu?Kích thước hình ảnh được mã hóa base64
Bạn có nên sử dụng hình ảnh được mã hóa base64 trên trang web của mình không?
Nếu tôi chuyển đổi hình ảnh (jpg hoặc png) thành base64, thì nó sẽ lớn hơn hoặc nó sẽ có cùng kích thước? Nó sẽ lớn hơn bao nhiêu?Kích thước hình ảnh được mã hóa base64
Bạn có nên sử dụng hình ảnh được mã hóa base64 trên trang web của mình không?
Đó sẽ là khoảng 37% lớn hơn:
Rất gần, kích thước cuối cùng của Base64 -encoded dữ liệu nhị phân bằng 1,37 lần so với kích thước dữ liệu gốc
Nó sẽ lớn hơn trong base64.
Base64 sử dụng 6 bit mỗi byte để mã hóa dữ liệu, trong khi nhị phân sử dụng 8 bit trên mỗi byte. Ngoài ra, có một chút đệm trên cùng với Base64. Không phải tất cả các bit đều được sử dụng với Base64 vì nó được phát triển ở vị trí đầu tiên để mã hóa dữ liệu nhị phân trên các hệ thống chỉ có thể xử lý chính xác dữ liệu không nhị phân.
Điều đó có nghĩa là hình ảnh được mã hóa sẽ lớn hơn khoảng 25%, cộng với chi phí liên tục cho phần đệm.
Mã hóa hình ảnh thành base64 sẽ làm cho hình ảnh lớn hơn khoảng 30%.
Xem các chi tiết trong bài viết wikipedia về Data URI scheme, nơi mà nó khẳng định:
Base64 mã hóa URI dữ liệu là 1/3 kích thước lớn hơn tương đương nhị phân của họ. (Tuy nhiên, chi phí này được giảm xuống còn 2-3% nếu máy chủ HTTP nén phản ứng bằng gzip)
Nó chắc chắn sẽ chi phí bạn nhiều không gian hơn & băng thông nếu bạn muốn sử dụng hình ảnh được mã hóa base64. Tuy nhiên, nếu trang web của bạn có nhiều hình ảnh nhỏ, bạn có thể giảm thời gian tải trang bằng cách mã hóa hình ảnh của bạn thành base64 và đặt chúng thành html. Bằng cách này, trình duyệt của khách hàng sẽ không cần phải tạo nhiều kết nối với các hình ảnh, nhưng sẽ có chúng trong html.
Điều này sẽ không phải là một vấn đề khi HTTP 2 thực sự đi qua. – Philip
@Philip Đúng vậy, nhưng tôi thích yếu tố di động trong việc có tất cả các tài nguyên chứa trong tệp HTML. Điều đó sẽ giúp với bộ nhớ đệm trên web di động ở các khu vực có mạng lưới đốm. – aalaap
@aalaap Vấn đề với điều đó là nếu bạn thực hiện một thay đổi trên trang, bạn cần phải tải lại tất cả nội dung bao gồm cả hình ảnh. Trường hợp nếu bạn có các tài sản tách ra, bạn có thể có một tuổi cao hơn trên những người và nó sẽ được lưu trữ trong bộ nhớ cache và không được tải lại vào bộ nhớ cache hết hạn trên trang nó tự. – Philip
Đây là a really helpful overview of when to base64 encode and when not to bởi David Calhoun.
Câu trả lời cơ bản = tệp được mã hóa cơ sở gzipped64 sẽ có thể so sánh được với kích thước tệp theo chuẩn nhị phân (jpg/png). Các tệp nhị phân của Gzip'd sẽ có kích thước tệp nhỏ hơn.
Takeaway = Có một số lợi thế để mã hóa và gzipping biểu tượng giao diện người dùng của bạn, v.v. nhưng không khôn ngoan để làm điều này cho hình ảnh lớn hơn.
Kích thước của base64-hình ảnh
Base64 sử dụng 64 nhân vật khác nhau và đây là 2^6. Vì vậy, base64 lưu trữ 6 bit cho mỗi ký tự 8 bit. Vì vậy, tỷ lệ này là 6/8 từ dữ liệu chưa được chuyển đổi thành dữ liệu base64. Đây không phải là tính toán chính xác, nhưng là một ước tính sơ bộ.
Ví dụ:
Hình ảnh 48kb cần khoảng 64kb làm hình ảnh được chuyển đổi base64.
tính: (48/6) * 8 = 64
Simple CLI tính trên các hệ thống Linux:
$ cat /dev/urandom|head -c 48000|base64|wc -c
64843
Hoặc sử dụng một hình ảnh:
$ cat my.png|base64|wc -c
base64-hình ảnh và các trang web
Câu hỏi này rất nhiều khó trả lời hơn. Nói chung, càng lớn hình ảnh càng ít ý nghĩa hơn khi sử dụng base64. Nhưng hãy xem xét các điểm sau:
Vì vậy, câu trả lời là: Phụ thuộc.
Thời gian duy nhất bạn muốn làm điều gì đó như vậy là nếu bạn bị giới hạn ở tài nguyên văn bản thuần túy và không thể sử dụng định dạng hình ảnh thô vì một lý do nào đó. – Wug
Có một câu trả lời hay ở đây: http://stackoverflow.com/questions/1533113/calculate-the-size-to-a-base-64-encoded-message – Steed
base64 làm cho các liên kết sâu không thể thực hiện được. Đây có thể là một điểm cộng. – damoeb