在 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)字符串的主要内容,如果未能解决你的问题,请参考以下文章

在python中将png图像转换为一个pdf

在Python中将turtle绘制的图像转换为PNG

在python中将32位二进制转换为十进制

在python中将整数转换为二进制

如何在 Python 中将十六进制转换为十进制? [复制]

在python中将二进制转换为字符串