Python二进制数据格式转换问题:图片存储格式不符合需求
二进制文件转数据库存储格式问题
问题场景
首次处理二进制文件,需将一张1x1像素的图片存入数据库。用Python以二进制模式读取图片后得到的格式,与数据库要求的存储格式不匹配。
当前读取的二进制结果
b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x01\x03\x00\x00\x00%\xdbV\xca\x00\x00\x00\x03PLTE\x00\x00\x00\xa7z=\xda\x00\x00\x00\x01tRNS\x00@\xe6\xd8f\x00\x00\x00\nIDAT\x08\xd7c`\x00\x00\x00\x02\x00\x01\xe2!\xbc3\x00\x00\x00\x00IEND\xaeB`\x82'
数据库要求的存储格式
0x89504e470d0a1a0a0000000d494844520000000100000001010300000025db56ca00000003504c5445000000a77a3dda0000000174524e530040e6d8660000000a4944415408d76360000000020001e221bc330000000049454e44ae426082
现有读取代码
with open("1x1.jpg", 'rb') as File: binaryData=File.read() print(binaryData)
注:该图片为1x1空像素图,原PNG格式图片来自维基共享资源,扩展名被改为jpg。
解决方案
使用Python的binascii.hexlify()方法,可将二进制数据直接转换为数据库需要的十六进制格式,代码如下:
import binascii with open("1x1.jpg", 'rb') as File: binary_data = File.read() # 将二进制转十六进制字节串,再解码为普通字符串 hex_str = binascii.hexlify(binary_data).decode('utf-8') # 添加数据库要求的0x前缀 db_compatible_format = f"0x{hex_str}" print(db_compatible_format)
说明
binascii.hexlify()会把二进制字节转换为对应的十六进制字节串(比如b'\x89'会变成b'89')- 调用
.decode('utf-8')将字节串转为普通字符串,方便后续拼接前缀 - 最后拼接
0x前缀,即可得到符合要求的存储格式
另外注意:虽然文件扩展名被改为jpg,但实际仍是PNG格式,用rb模式读取不会影响二进制数据的完整性。
内容的提问来源于stack exchange,提问作者Vricken
相关产品推荐
相关产品推荐

