Hướng dẫn encode file to base64 python - mã hóa tập tin thành base64 python

Tôi muốn mã hóa một hình ảnh thành một chuỗi bằng mô -đun Base64. Tôi đã gặp phải một vấn đề mặc dù. Làm cách nào để chỉ định hình ảnh tôi muốn được mã hóa? Tôi đã thử sử dụng thư mục cho hình ảnh, nhưng điều đó chỉ đơn giản là dẫn đến thư mục được mã hóa. Tôi muốn tệp hình ảnh thực tế được mã hóa.

CHỈNH SỬA

Tôi đã thử đoạn trích này:

with open("C:\Python26\seriph2.BMP", "rb") as f:
    data12 = f.read()
    UU = data12.encode("base64")
    UUU = base64.b64decode(UU)

    print UUU

    self.image = ImageTk.PhotoImage(Image.open(UUU))

Nhưng tôi gặp lỗi sau:

Traceback (most recent call last):
  File "", line 245, in run_nodebug
  File "C:\Python26\GUI1.2.9.py", line 473, in 
    app = simpleapp_tk(None)
  File "C:\Python26\GUI1.2.9.py", line 14, in __init__
    self.initialize()
  File "C:\Python26\GUI1.2.9.py", line 431, in initialize
    self.image = ImageTk.PhotoImage(Image.open(UUU))
  File "C:\Python26\lib\site-packages\PIL\Image.py", line 1952, in open
    fp = __builtin__.open(fp, "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str

Tôi đang làm gì sai?

Hướng dẫn encode file to base64 python - mã hóa tập tin thành base64 python

Hỏi ngày 15 tháng 9 năm 2010 lúc 7:24Sep 15, 2010 at 7:24

hình chữ nhậtrectangletangle

48.5K91 Huy hiệu vàng199 Huy hiệu bạc273 Huy hiệu Đồng91 gold badges199 silver badges273 bronze badges

Tôi không chắc tôi hiểu câu hỏi của bạn. Tôi cho rằng bạn đang làm một cái gì đó dọc theo dòng của:

import base64

with open("yourfile.ext", "rb") as image_file:
    encoded_string = base64.b64encode(image_file.read())

Tất nhiên, bạn phải mở tệp trước và đọc nội dung của nó - bạn không thể chỉ cần chuyển đường dẫn đến chức năng mã hóa.

Chỉnh sửa: OK, đây là bản cập nhật sau khi bạn đã chỉnh sửa câu hỏi ban đầu của mình. Ok, here is an update after you have edited your original question.

Trước hết, hãy nhớ sử dụng các chuỗi RAW (tiền tố chuỗi với 'r') khi sử dụng các trình phân cách đường dẫn trên Windows, để tránh vô tình nhấn một ký tự thoát. Thứ hai, hình ảnh của pil.

Điều đó đang được nói, bạn có thể sử dụng CStringio để tạo một đối tượng như vậy từ bộ đệm bộ nhớ:

import cStringIO
import PIL.Image

# assume data contains your decoded image
file_like = cStringIO.StringIO(data)

img = PIL.Image.open(file_like)
img.show()

Đã trả lời ngày 15 tháng 9 năm 2010 lúc 7:31Sep 15, 2010 at 7:31

Jim Brissomjim BrissomJim Brissom

30.8k3 Huy hiệu vàng37 Huy hiệu bạc33 Huy hiệu Đồng3 gold badges37 silver badges33 bronze badges

4

Câu trả lời đầu tiên sẽ in một chuỗi với tiền tố B '. Điều đó có nghĩa là chuỗi của bạn sẽ giống như b'Your_String 'để giải quyết vấn đề này, vui lòng thêm dòng mã sau.

encoded_string= base64.b64encode(img_file.read())
print(encoded_string.decode('utf-8'))

Tôi đã trải nghiệm điều này trong khi chuyển đổi hình ảnh thành chuỗi Base64. Bạn có thể xem cách tôi loại bỏ nó từ đó. Liên kết ở đây hình ảnh đến chuỗi base64 và sửa 'B từ tiền tố

Đã trả lời ngày 26 tháng 4 năm 2019 lúc 21:20Apr 26, 2019 at 21:20

Hướng dẫn encode file to base64 python - mã hóa tập tin thành base64 python

4

import base64
from PIL import Image
from io import BytesIO

with open("image.jpg", "rb") as image_file:
    data = base64.b64encode(image_file.read())

im = Image.open(BytesIO(base64.b64decode(data)))
im.save('image1.png', 'PNG')

Đã trả lời ngày 19 tháng 9 năm 2019 lúc 6:55Sep 19, 2019 at 6:55

Hướng dẫn encode file to base64 python - mã hóa tập tin thành base64 python

Abhijith Mabhijith mAbhijith M

5954 Huy hiệu bạc5 Huy hiệu Đồng4 silver badges5 bronze badges

1

Mượn từ những gì IVO van der Wijk và Gnibbler đã phát triển trước đó, đây là một giải pháp năng động

import cStringIO
import PIL.Image

image_data = None

def imagetopy(image, output_file):
    with open(image, 'rb') as fin:
        image_data = fin.read()

    with open(output_file, 'w') as fout:
        fout.write('image_data = '+ repr(image_data))

def pytoimage(pyfile):
    pymodule = __import__(pyfile)
    img = PIL.Image.open(cStringIO.StringIO(pymodule.image_data))
    img.show()

if __name__ == '__main__':
    imagetopy('spot.png', 'wishes.py')
    pytoimage('wishes')

Sau đó, bạn có thể quyết định biên dịch tệp hình ảnh đầu ra với Cython để làm cho nó mát mẻ. Với phương pháp này, bạn có thể gói tất cả đồ họa của mình thành một mô -đun.

Đã trả lời ngày 3 tháng 10 năm 2013 lúc 15:22Oct 3, 2013 at 15:22

Hướng dẫn encode file to base64 python - mã hóa tập tin thành base64 python

ichuxichuxiChux

2.20622 huy hiệu bạc36 Huy hiệu đồng22 silver badges36 bronze badges

Như tôi đã nói trong câu hỏi trước đây của bạn, không cần phải mã hóa chuỗi64, nó sẽ chỉ làm cho chương trình chậm hơn. Chỉ cần sử dụng repr

>>> with open("images/image.gif", "rb") as fin:
...  image_data=fin.read()
...
>>> with open("image.py","wb") as fout:
...  fout.write("image_data="+repr(image_data))
...

Bây giờ hình ảnh được lưu trữ dưới dạng biến gọi là

Traceback (most recent call last):
  File "", line 245, in run_nodebug
  File "C:\Python26\GUI1.2.9.py", line 473, in 
    app = simpleapp_tk(None)
  File "C:\Python26\GUI1.2.9.py", line 14, in __init__
    self.initialize()
  File "C:\Python26\GUI1.2.9.py", line 431, in initialize
    self.image = ImageTk.PhotoImage(Image.open(UUU))
  File "C:\Python26\lib\site-packages\PIL\Image.py", line 1952, in open
    fp = __builtin__.open(fp, "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
0 trong một tệp gọi là
Traceback (most recent call last):
  File "", line 245, in run_nodebug
  File "C:\Python26\GUI1.2.9.py", line 473, in 
    app = simpleapp_tk(None)
  File "C:\Python26\GUI1.2.9.py", line 14, in __init__
    self.initialize()
  File "C:\Python26\GUI1.2.9.py", line 431, in initialize
    self.image = ImageTk.PhotoImage(Image.open(UUU))
  File "C:\Python26\lib\site-packages\PIL\Image.py", line 1952, in open
    fp = __builtin__.open(fp, "rb")
TypeError: file() argument 1 must be encoded string without NULL bytes, not str
1 Bắt đầu một trình thông dịch mới và nhập Image_Data

>>> from image import image_data
>>>

Đã trả lời ngày 15 tháng 9 năm 2010 lúc 7:36Sep 15, 2010 at 7:36

Hướng dẫn encode file to base64 python - mã hóa tập tin thành base64 python

John La Rooyjohn La RooyJohn La Rooy

288K51 Huy hiệu vàng359 Huy hiệu bạc500 Huy hiệu Đồng51 gold badges359 silver badges500 bronze badges

3

Công việc của nó cho tôi

import base64
import requests

# Getting image in bytes
response = requests.get("image_url") 

# image encoding
encoded_image = base64.b64encode(response.content)

# image decoding and without it's won't work due to some '\xff' error
decoded_image= base64.b64decode(encoded_image)

Đã trả lời ngày 7 tháng 4 năm 2021 lúc 10:54Apr 7, 2021 at 10:54

Hướng dẫn encode file to base64 python - mã hóa tập tin thành base64 python