Hướng dẫn convert image byte array to base64 string python - chuyển đổi mảng byte hình ảnh thành chuỗi base64 python

Cách tiếp cận đơn giản nhất sẽ là: mảng đến JSON đến Base64:

import json
import base64

data = [0, 1, 0, 0, 83, 116, -10]
dataStr = json.dumps(data)

base64EncodedStr = base64.b64encode(dataStr.encode('utf-8'))
print(base64EncodedStr)

print('decoded', base64.b64decode(base64EncodedStr))

In ra:

>>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
>>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !

... Một tùy chọn khác có thể sử dụng mô -đun Bitarray.

Giới thiệu

Bạn đã bao giờ nhận được một tệp PDF hoặc một tệp hình ảnh từ ai đó qua email, chỉ để xem các ký tự lạ khi bạn mở nó? Điều này có thể xảy ra nếu máy chủ email của bạn chỉ được thiết kế để xử lý dữ liệu văn bản. Các tệp có dữ liệu nhị phân, byte đại diện cho thông tin không phải là hình ảnh như hình ảnh, có thể dễ dàng bị hỏng khi được chuyển và xử lý sang các hệ thống chỉ có văn bản.

Mã hóa Base64 cho phép chúng tôi chuyển đổi các byte chứa dữ liệu nhị phân hoặc văn bản sang các ký tự ASCII. Bằng cách mã hóa dữ liệu của chúng tôi, chúng tôi cải thiện cơ hội được xử lý chính xác bởi các hệ thống khác nhau.

Trong hướng dẫn này, chúng tôi sẽ tìm hiểu cách mã hóa và giải mã Base64 và cách sử dụng nó. Sau đó, chúng tôi sẽ sử dụng mã hóa Python đến Base64 và giải mã cả dữ liệu văn bản và dữ liệu nhị phân.

Base64 mã hóa là gì?

Mã hóa Base64 là một loại chuyển đổi byte thành các ký tự ASCII. Trong toán học, cơ sở của một hệ thống số đề cập đến số lượng ký tự khác nhau đại diện cho số. Tên của mã hóa này xuất phát trực tiếp từ định nghĩa toán học của các cơ sở - chúng tôi có 64 ký tự đại diện cho số.

Bộ ký tự Base64 chứa:

  • 26 chữ hoa
  • 26 chữ cái chữ thường
  • 10 số
  • >>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
    >>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
    
    3 và
    >>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
    >>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
    
    4 cho các dòng mới (một số triển khai có thể sử dụng các ký tự khác nhau)

Khi máy tính chuyển đổi các ký tự base64 thành nhị phân, mỗi ký tự base64 đại diện cho 6 bit thông tin.

Lưu ý: Đây không phải là thuật toán mã hóa và không nên được sử dụng cho mục đích bảo mật. This is not an encryption algorithm, and should not be used for security purposes.

Bây giờ chúng ta đã biết mã hóa Base64 nào và cách nó được thể hiện trên máy tính, chúng ta hãy nhìn sâu hơn về cách thức hoạt động của nó.

Mã hóa Base64 hoạt động như thế nào?

Chúng tôi sẽ minh họa cách mã hóa Base64 hoạt động bằng cách chuyển đổi dữ liệu văn bản, vì nó tiêu chuẩn hơn so với các định dạng nhị phân khác nhau để lựa chọn. Nếu chúng tôi đã mã hóa Base64, chúng tôi sẽ làm theo các bước sau:

  1. Lấy giá trị ASCII của mỗi ký tự trong chuỗi
  2. Tính toán nhị phân 8 bit tương đương với các giá trị ASCII
  3. Chuyển đổi các khối 8 bit thành các khối 6 bit bằng cách chỉ nhóm lại các chữ số
  4. Chuyển đổi các nhóm nhị phân 6 bit thành các giá trị thập phân tương ứng của chúng.
  5. Sử dụng bảng mã hóa Base64, gán ký tự base64 tương ứng cho mỗi giá trị thập phân.

Hãy xem cách nó hoạt động bằng cách chuyển đổi chuỗi "Python" thành chuỗi base64.

Các giá trị ASCII của các ký tự

>>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
>>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
5 lần lượt là
>>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
>>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
6. Chúng ta có thể biểu diễn các giá trị ASCII này trong nhị phân 8 bit như sau:

01010000 01111001 01110100 01101000 01101111 01101110

Hãy nhớ lại rằng các ký tự Base64 chỉ đại diện cho 6 bit dữ liệu. Bây giờ chúng tôi nhóm lại các chuỗi nhị phân 8 bit thành các khối 6 bit. Các nhị phân kết quả sẽ trông như thế này:

010100 000111 100101 110100 011010 000110 111101 101110

Lưu ý: Đôi khi chúng tôi không thể nhóm dữ liệu thành các chuỗi 6 bit. Nếu điều đó xảy ra, chúng ta phải đệm trình tự. Sometimes we are not able to group the data into sequences of 6 bits. If that occurs, we have to pad the sequence.

Với dữ liệu của chúng tôi trong các nhóm 6 bit, chúng tôi có thể thu được giá trị thập phân cho mỗi nhóm. Sử dụng kết quả cuối cùng của chúng tôi, chúng tôi nhận được các giá trị thập phân sau:

20 7 37 52 26 6 61 46

Cuối cùng, chúng tôi sẽ chuyển đổi các số thập phân này thành ký tự base64 thích hợp bằng cách sử dụng bảng chuyển đổi Base64:

Như bạn có thể thấy, giá trị

>>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
>>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
7 tương ứng với chữ cái
>>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
>>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
8. Sau đó, chúng tôi nhìn vào
>>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
>>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
9 và quan sát nó được ánh xạ tới
01010000 01111001 01110100 01101000 01101111 01101110
0. Tiếp tục tra cứu này cho tất cả các giá trị thập phân, chúng ta có thể xác định rằng "python" được biểu diễn dưới dạng
01010000 01111001 01110100 01101000 01101111 01101110
1 khi base64 được mã hóa. Bạn có thể xác minh kết quả này với một bộ chuyển đổi trực tuyến.

Để base64 mã hóa một chuỗi, chúng tôi chuyển đổi nó thành các chuỗi nhị phân, sau đó thành các chuỗi thập phân và cuối cùng, sử dụng bảng tra cứu để có được một chuỗi các ký tự ASCII. Với sự hiểu biết sâu sắc hơn về cách thức hoạt động của nó, chúng ta hãy xem tại sao chúng ta sẽ mã hóa dữ liệu của chúng ta.

Tại sao sử dụng mã hóa Base64?

Trong máy tính, tất cả dữ liệu của các loại khác nhau được truyền là 1 và 0. Tuy nhiên, một số kênh truyền thông và ứng dụng không thể hiểu tất cả các bit mà nó nhận được. Điều này là do ý nghĩa của chuỗi 1 và 0 phụ thuộc vào loại dữ liệu mà nó đại diện. Ví dụ,

01010000 01111001 01110100 01101000 01101111 01101110
2 phải được xử lý khác nhau nếu nó đại diện cho một chữ cái hoặc một hình ảnh.

Để làm việc xung quanh giới hạn này, bạn có thể mã hóa dữ liệu của mình thành văn bản, cải thiện cơ hội của nó được truyền và xử lý chính xác. Base64 là một phương pháp phổ biến để đưa dữ liệu nhị phân vào các ký tự ASCII, được đa số các mạng và ứng dụng được hiểu rộng rãi.

Một kịch bản trong thế giới thực phổ biến trong đó mã hóa Base64 được sử dụng rất nhiều trong các máy chủ thư. Chúng ban đầu được xây dựng để xử lý dữ liệu văn bản, nhưng chúng tôi cũng hy vọng chúng sẽ gửi hình ảnh và phương tiện khác với một thông báo. Trong những trường hợp đó, dữ liệu phương tiện của bạn sẽ được mã hóa base64 khi nó được gửi. Sau đó, nó sẽ được giải mã Base64 khi nhận được để một ứng dụng có thể sử dụng nó. Vì vậy, ví dụ, hình ảnh trong HTML có thể trông như thế này:

<img src="data:image/png;base64,aVRBOw0AKg1mL9...">

Hiểu rằng dữ liệu đôi khi cần được gửi dưới dạng văn bản để nó không bị hỏng, chúng ta hãy xem cách chúng ta có thể sử dụng dữ liệu được mã hóa và giải mã Python to Base64.

Chuỗi mã hóa với Python

Python 3 cung cấp mô -đun

01010000 01111001 01110100 01101000 01101111 01101110
3 cho phép chúng tôi dễ dàng mã hóa và giải mã thông tin. Trước tiên chúng tôi chuyển đổi chuỗi thành một đối tượng giống như byte. Sau khi chuyển đổi, chúng ta có thể sử dụng mô -đun
01010000 01111001 01110100 01101000 01101111 01101110
3 để mã hóa nó.

Trong một tệp mới

01010000 01111001 01110100 01101000 01101111 01101110
5, nhập các mục sau:

import base64

message = "Python is fun"
message_bytes = message.encode('ascii')
base64_bytes = base64.b64encode(message_bytes)
base64_message = base64_bytes.decode('ascii')

print(base64_message)

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

Trong mã trên, trước tiên chúng tôi nhập mô -đun

01010000 01111001 01110100 01101000 01101111 01101110
3. Biến
01010000 01111001 01110100 01101000 01101111 01101110
7 lưu trữ chuỗi đầu vào của chúng tôi sẽ được mã hóa. Chúng tôi chuyển đổi nó thành một đối tượng giống như byte bằng phương thức
01010000 01111001 01110100 01101000 01101111 01101110
8 của chuỗi và lưu trữ nó trong
01010000 01111001 01110100 01101000 01101111 01101110
9. Sau đó, chúng tôi mã hóa Base64
01010000 01111001 01110100 01101000 01101111 01101110
9 và lưu trữ kết quả trong
010100 000111 100101 110100 011010 000110 111101 101110
1 bằng phương pháp
010100 000111 100101 110100 011010 000110 111101 101110
2. Cuối cùng chúng tôi nhận được biểu diễn chuỗi của chuyển đổi Base64 bằng cách giải mã
010100 000111 100101 110100 011010 000110 111101 101110
1 là ASCII.

Lưu ý: Hãy chắc chắn sử dụng cùng một định dạng mã hóa thành khi chuyển đổi từ chuỗi sang byte và từ byte sang chuỗi. Điều này ngăn chặn tham nhũng dữ liệu. Be sure to use the same encoding format to when converting from string to bytes, and from bytes to string. This prevents data corruption.

Chạy tệp này sẽ cung cấp đầu ra sau:

$ python3 encoding_text.py
UHl0aG9uIGlzIGZ1bg==

Bây giờ chúng ta hãy xem làm thế nào chúng ta có thể giải mã một chuỗi base64 thành biểu diễn thô của nó.

Chuỗi giải mã với Python

Giải mã một chuỗi base64 về cơ bản là một mặt trái của quá trình mã hóa. Chúng tôi giải mã chuỗi base64 thành byte dữ liệu không được mã hóa. Sau đó chúng tôi chuyển đổi đối tượng giống như byte thành một chuỗi.

Trong một tệp mới có tên

010100 000111 100101 110100 011010 000110 111101 101110
4, hãy viết mã sau:

import base64

base64_message = 'UHl0aG9uIGlzIGZ1bg=='
base64_bytes = base64_message.encode('ascii')
message_bytes = base64.b64decode(base64_bytes)
message = message_bytes.decode('ascii')

print(message)

Một lần nữa, chúng tôi cần mô -đun

01010000 01111001 01110100 01101000 01101111 01101110
3 được nhập. Sau đó, chúng tôi mã hóa thông điệp của chúng tôi thành một đối tượng giống như byte với
010100 000111 100101 110100 011010 000110 111101 101110
6. Chúng tôi tiếp tục bằng cách gọi phương thức
010100 000111 100101 110100 011010 000110 111101 101110
7 để giải mã
010100 000111 100101 110100 011010 000110 111101 101110
1 vào biến
01010000 01111001 01110100 01101000 01101111 01101110
9 của chúng tôi. Cuối cùng, chúng tôi giải mã
01010000 01111001 01110100 01101000 01101111 01101110
9 thành một đối tượng chuỗi
01010000 01111001 01110100 01101000 01101111 01101110
7, vì vậy nó trở nên dễ đọc.

Chạy tệp này để xem đầu ra sau:

$ python3 decoding_text.py
Python is fun

Bây giờ chúng ta có thể mã hóa và giải mã dữ liệu chuỗi, chúng ta hãy cố gắng mã hóa dữ liệu nhị phân.

Mã hóa dữ liệu nhị phân với Python

Như chúng tôi đã đề cập trước đây, mã hóa Base64 chủ yếu được sử dụng để biểu diễn dữ liệu nhị phân làm văn bản. Trong Python, chúng ta cần đọc tệp nhị phân và base64 mã hóa byte của nó để chúng ta có thể tạo chuỗi được mã hóa của nó.

Hãy xem cách chúng ta có thể mã hóa hình ảnh này:

Tạo một tệp mới

20 7 37 52 26 6 61 46
2 và thêm thông tin sau:

>>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
>>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
0

Chúng ta hãy đi qua đoạn mã ở trên. Chúng tôi mở tệp bằng

20 7 37 52 26 6 61 46
3. Lưu ý cách chúng tôi vượt qua đối số
20 7 37 52 26 6 61 46
4 cùng với đường dẫn tệp - điều này cho Python biết rằng chúng tôi đang đọc một tệp nhị phân. Không cần sử dụng
20 7 37 52 26 6 61 46
4, Python sẽ cho rằng chúng tôi đang đọc một tệp văn bản.

Sau đó, chúng tôi sử dụng phương thức

20 7 37 52 26 6 61 46
6 để lấy tất cả dữ liệu trong tệp vào biến
20 7 37 52 26 6 61 46
7. Tương tự như cách chúng tôi xử lý các chuỗi, chúng tôi đã mã hóa các byte với
010100 000111 100101 110100 011010 000110 111101 101110
2 và sau đó sử dụng
20 7 37 52 26 6 61 46
9 trên
<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
0 để lấy dữ liệu được mã hóa base64 bằng các ký tự có thể đọc được của con người.

Thực hiện mã sẽ tạo ra đầu ra tương tự như:

>>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
>>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
1

Đầu ra của bạn có thể thay đổi tùy thuộc vào hình ảnh bạn đã chọn để mã hóa.

Bây giờ chúng ta đã biết cách BAS64 mã hóa dữ liệu nhị phân trong Python, chúng ta hãy di chuyển trên base64 giải mã dữ liệu nhị phân.

Giải mã dữ liệu nhị phân với Python

Base64 Decoding nhị phân tương tự như dữ liệu văn bản giải mã Base64. Sự khác biệt chính là sau khi chúng tôi giải mã chuỗi, chúng tôi lưu dữ liệu dưới dạng tệp nhị phân thay vì một chuỗi.

Hãy xem cách giải mã Base64 trong thực tế bằng cách tạo một tệp mới có tên

<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
1. Nhập mã sau vào tệp Python:

>>> WzAsIDEsIDAsIDAsIDgzLCAxMTYsIC0xMF0=
>>> ('decoded', '[0, 1, 0, 0, 83, 116, -10]')  # json.loads here !
2

Trong mã trên, trước tiên chúng tôi chuyển đổi dữ liệu chuỗi Base64 của chúng tôi thành một đối tượng giống như byte có thể được giải mã. Khi bạn là Base64 giải mã một tệp nhị phân, bạn phải biết loại dữ liệu đang được giải mã. Ví dụ: dữ liệu này chỉ hợp lệ dưới dạng tệp PNG và không phải là tệp MP3 vì nó mã hóa một hình ảnh.must know the type of data that is being decoded. For example, this data is only valid as a PNG file and not a MP3 file as it encodes an image.

Khi tệp đích được mở, chúng tôi base64 giải mã dữ liệu bằng

<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
2, một phương thức khác với
010100 000111 100101 110100 011010 000110 111101 101110
7 được sử dụng với các chuỗi. Phương pháp này nên được sử dụng để giải mã dữ liệu nhị phân. Cuối cùng, chúng tôi viết dữ liệu được giải mã vào một tệp.

Trong cùng một thư mục mà bạn đã thực thi

<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
1, giờ đây bạn sẽ thấy một tệp
<img src="data:image/png;base64,aVRBOw0AKg1mL9...">
5 mới có chứa hình ảnh gốc được mã hóa trước đó.

Sự kết luận

Mã hóa Base64 là một kỹ thuật phổ biến để chuyển đổi dữ liệu ở các định dạng nhị phân khác nhau thành một chuỗi các ký tự ASCII. Điều này rất hữu ích khi truyền dữ liệu đến các mạng hoặc ứng dụng không thể xử lý dữ liệu nhị phân thô nhưng sẽ dễ dàng xử lý văn bản.

Với Python, chúng ta có thể sử dụng mô -đun

01010000 01111001 01110100 01101000 01101111 01101110
3 để mã hóa Base64 và giải mã dữ liệu văn bản và nhị phân.

Những ứng dụng nào bạn sẽ sử dụng để mã hóa và giải mã dữ liệu Base64?

Làm thế nào tôi có thể chuyển đổi một hình ảnh thành chuỗi base64 bằng python?

Chuyển đổi hình ảnh thành chuỗi..
Ở đây trước tiên, chúng tôi nhập phương thức Base Base64 để mã hóa hình ảnh đã cho ..
Tiếp theo, chúng tôi đã mở tệp hình ảnh của mình ở chế độ RB được đọc ở chế độ nhị phân ..
Chúng tôi đọc hình ảnh của chúng tôi với Image2.read () đọc hình ảnh và mã hóa nó bằng b64encode () Đó là phương thức được sử dụng để mã hóa dữ liệu thành base64 ..

Làm cách nào để nhận được chuỗi được mã hóa base64?

Nếu chúng ta mã hóa Base64, chúng ta sẽ làm theo các bước sau: Lấy giá trị ASCII của mỗi ký tự trong chuỗi.Tính toán nhị phân 8 bit tương đương với các giá trị ASCII.Chuyển đổi các khối 8 bit thành các khối 6 bit bằng cách đơn giản là nhóm lại các chữ số.Take the ASCII value of each character in the string. Calculate the 8-bit binary equivalent of the ASCII values. Convert the 8-bit chunks into chunks of 6 bits by simply re-grouping the digits.

Làm cách nào để mã hóa thành Base64 trong Python?

Cách làm: Mã hóa một tệp trong Base64..
Mã hóa một chuỗi an toàn URL trong Base64 ..
Giải mã một tệp base64 ..
Mã hóa một chuỗi trong base64 ..
Mã hóa chuỗi trong base64 với các ký tự thay thế ..
Giải mã một chuỗi từ Base64 ..

Làm cách nào để chuyển đổi hình ảnh thành base64?

Để giải mã một hình ảnh từ chuỗi được mã hóa base64, hãy thực hiện các bước sau ...
Mở Base64 để chuyển đổi hình ảnh ..
Nhập chuỗi mã hóa Base64 ..
Chọn loại hình ảnh.....
Sau khi chọn loại hình ảnh, nhấp vào nút "Tạo hình ảnh" ..
Công cụ giải mã chuỗi được mã hóa base64 và hiển thị hình ảnh ..