最近遇到几个文件,使用的图像编码是BGR565格式。所用包为PIL,python3以上似乎不支持了,可以用另一个pillow代替,大神魔改的版本。功能一样
BGR与RGB相近,无非就是将B与R的二进制调换位置,565格式代表共16位数据。
首先将文件二进制数据读取,并保存为txt文档。然后使用py编写程序进行数据解析。
from PIL import Image, ImageDraw
w = 236 # 宽
h = 155 # 高
FileAdd = "D:\\1.txt"
# 用于转换的
HEX = {}
HEX1 = {}
RGB = []
def Hex_To_Dec(hex):
if hex == '0':
rx = 0
elif hex == '1':
rx = 1
elif hex == '2':
rx = 2
elif hex == '3':
rx = 3
elif hex == '4':
rx = 4
elif hex == '5':
rx = 5
elif hex == '6':
rx = 6
elif hex == '7':
rx = 7
elif hex == '8':
rx = 8
elif hex == '9':
rx = 9
elif hex == 'A':
rx = 10
elif hex == 'B':
rx = 11
elif hex == 'C':
rx = 12
elif hex == 'D':
rx = 13
elif hex == 'E':
rx = 14
elif hex == 'F':
rx = 15
else:
return (100)
return (re)
# main()
if __name__ == "__main__":
f = open(FileAdd, encoding="utf-8") # 打开文件
print("正在解析" + FileAdd + "的数据,合成文件名为" + str(w) + "*" + str(h) + "的图片")
x = 0
z = 0
for x in range(w * h * 60): # 进制转换 16-10
f.seek(z + 0, 0)
f1 = f.read(1)
f.seek(z + 1, 0)
f2 = f.read(1)
f.seek(z + 3, 0)
f3 = f.read(1)
f.seek(z + 4, 0)
f4 = f.read(1)
z = z + 6
HEX1[x] = ((Hex_To_Dec(f1) << 12) + (Hex_To_Dec(f2) << 8) + (Hex_To_Dec(f3) << 4) + Hex_To_Dec(f4))
a = bin(HEX1[x]) #BRG与RGB互相转换
a1 = a[2:7]
a2 = a[7:13]
a3 = a[13:18]
c = a3 + a2 + a1
HEX[x] = int(c,2)
if z >= (w * h * 6):
break
f.close() # 关闭文件
x = 0
for x in range(len(HEX)):
r = (((HEX[x] & 0xF800) >> 8))
g = (((HEX[x] & 0x7E0) >> 3))
b = (((HEX[x] & 0x1F) << 3))
rgb = (r, g, b)
RGB.append(rgb)
# print(RGB)
# print(HEX)
image = Image.new('RGB', (w, h), (255, 255, 255)) # 创建新图片对象
draw = ImageDraw.Draw(image) # 创建Draw对象用于绘制新图:
x = 0
y = 0
i = 0
for y in range(h): # 填充每个像素并对对应像素填上RGB值:
for x in range(w):
draw.point((x, y), fill=RGB[i])
i = i + 1
image.save('D:\\2.jpeg', 'jpeg') # 将转换后的图像保存到D盘中
image.show() # 查看图像
本文为原创文章,转载请注明出处!