2012-07-09 49 views
58

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?

+1

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

+0

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

+0

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

Trả lời

88

Đó 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

Nguồn: http://en.wikipedia.org/wiki/Base64

+16

Không lớn hơn 137%, 137% kích thước ban đầu :-) 37% lớn hơn (theo nguồn của bạn). –

+2

Tôi sẽ nói rằng có khá nhiều 4/3 kích thước ban đầu. – kiwixz

+0

Có bất kỳ giới hạn nào về kích thước hình ảnh để chuyển đổi hình ảnh sang base64 không? – 151291

4

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.

5

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)

2

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.

+0

Điều này sẽ không phải là một vấn đề khi HTTP 2 thực sự đi qua. – Philip

+0

@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

+0

@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

11

Đâ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.

0

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:

  • Rất nhiều hình ảnh được nhúng trong tệp HTML hoặc tệp CSS có thể có các chuỗi tương tự. Đối với PNG, bạn thường tìm thấy các ký tự "A" lặp lại. Sử dụng gzip (đôi khi được gọi là "deflate"), thậm chí có thể có cả kích thước. Nhưng nó phụ thuộc vào nội dung hình ảnh.
  • Yêu cầu chi phí của HTTP1.1: Đặc biệt với rất nhiều cookie, bạn có thể dễ dàng có một vài kilobyte trên mỗi yêu cầu. Nhúng hình ảnh base64 có thể lưu băng thông.
  • Không base64 mã hóa hình ảnh SVG, vì gzip hiệu quả hơn trên XML so với trên base64.
  • Lập trình: Trên hình ảnh được tạo theo kiểu động, sẽ dễ dàng phân phối chúng hơn trong một yêu cầu để phối hợp hai yêu cầu phụ thuộc.
  • Liên kết sâu: Nếu bạn muốn ngăn tải xuống hình ảnh, sẽ phức tạp hơn một chút khi trích xuất hình ảnh từ trang HTML.

Vì vậy, câu trả lời là: Phụ thuộc.

Các vấn đề liên quan