简体   繁体   English

如何在python中将字节从字符串转换为图像?

[英]How to convert bytes from string to image in python?

I have this byte object in string format inside a .txt file and I'm lost on how to convert it back into byte object, like img=b'\\x00\\x00\\x00' so that I can write it back into an image.我在.txt文件中有这个字符串格式的字节对象,但我不知道如何将它转换回字节对象,例如img=b'\\x00\\x00\\x00'以便我可以将它写回图像.

The image is supposed to be a black square when back to image format.当返回图像格式时,图像应该是黑色方块。

b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\xdd\x00\x00\x00\xdd\x08\x06\x00\x00\x00?\xc4w\x1a\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00\tpHYs\x00\x00\x0e\xc3\x00\x00\x0e\xc3\x01\xc7o\xa8d\x00\x00\x00!tEXtCreation Time\x002019:07:22 19:10:08\xa0\x9d\xf4\xb4\x00\x00\x02\x80IDATx^\xed\xd3\xb1\r\xc00\x00\xc30\xa7\xff\xff\xdcf\xe8\r\x9aH\xc0\xf0\x05:\xdb\xde; \xf2\xfc\x0fDD\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x10\x13\x1d\xc4D\x071\xd1ALt\x90\xda>\xddB\x02\xb9L3W\xe8\x00\x00\x00\x00IEND\xaeB`\x82'

Opening the file .txt file with the byte object使用字节对象打开文件.txt文件

file=open('filename.txt','r').read()

I tried this, but the file is in a string format我试过了,但file是字符串格式

with open('new_pic.png','wb')as img:
    img.write(file)

You should be reading the file as binary ( "rb" ).您应该将文件作为二进制文件 ( "rb" ) 读取。

file = open('filename.txt', 'rb').read()
print(type(file))  # <class 'bytes'>
print(file)        # b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x01\x06\x0

with open("image.png", "wb") as img:
    img.write(file)

Now, I don't know why you have image bytes stored in a text file, but a better implementation would be to use image-related modules like Pillow to read-write image files:现在,我不知道为什么将图像字节存储在文本文件中,但更好的实现是使用Pillow等图像相关模块来读写图像文件:

from PIL import Image

file = Image.open("input.png")
file.save("output.png")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM