在 Python 中将 PNG 转换为二进制(base 2)字符串
Posted
技术标签:
【中文标题】在 Python 中将 PNG 转换为二进制(base 2)字符串【英文标题】:Convert PNG to a binary (base 2) string in Python 【发布时间】:2021-07-17 18:18:40 【问题描述】:我基本上想读取一个 png 文件并将其转换为二进制(base 2)并将转换后的 base 2 值存储在一个字符串中。我已经尝试了很多东西,但它们都显示了一些错误
【问题讨论】:
请显示代码、错误信息并解释你做了什么。我们无法为您提供我们看不到的代码。 有很多库可以读取PNG文件,我认为它们都支持转换为字节串。将字节转换为二进制应该很简单。 【参考方案1】:您可以使用两种方法:
首先尝试读取图片并解码成base64格式:
import base64
with open("my_image.png", "rb") as f:
png_encoded = base64.b64encode(f.read())
然后,将 base64 字符串编码为 base2 字符串:
encoded_b2 = "".join([format(n, '08b') for n in png_encoded])
print(encoded_b2)
虽然,您可以将 base2 字符串解码为 png 文件:
decoded_b64 = b"".join([bytes(chr(int(encoded_b2[i:i + 8], 2)), "utf-8") for i in range(0, len(encoded_b2), 8)])
with open('my_image_decoded.png', 'wb') as f:
f.write(base64.b64decode(decoded_b64))
其次,直接读取字节并将字节作为基数2写入字符串:
from PIL import Image
from io import BytesIO
out = BytesIO()
with Image.open("my_image.png") as img:
img.save(out, format="png")
image_in_bytes = out.getvalue()
encoded_b2 = "".join([format(n, '08b') for n in image_in_bytes])
print(encoded_b2)
你可以将base2字符串解码成文件:
decoded_b2 = [int(encoded_b2[i:i + 8], 2) for i in range(0, len(encoded_b2), 8)]
with open('my_image_decoded.png', 'wb') as f:
f.write(bytes(decoded_b2))
【讨论】:
以上是关于在 Python 中将 PNG 转换为二进制(base 2)字符串的主要内容,如果未能解决你的问题,请参考以下文章