python 将图像标题信息转换为ASCII代码

mklgxw1f  于 2023-03-21  发布在  Python
关注(0)|答案(1)|浏览(124)

我得到了一个字符串,其中包含图像标题信息,如每个维度的像素数。标题如下:"1 10 10 1 4 LE"。除此之外,其他图像数据保存在以下base64代码中:"+igSKdAm9CVoJhYnzidqKLsmnyX2JwQo9CYhJgMmaCb5Jo0nMSevJmAnwibIJuEmnyZRJpomNicxJ9gmfSeoJkcmySZAJ/Am2CZZJ78nOSeUJ7km+CWVJpMnyCebJ6UnoiclJ7UmPyY3JgsnwyfGJ7cniSdlJ3oneSajJi8n3ye5Jz4nvCeMJ1onYSdAJ3QnsScLKHsnTCfuJ6MnGCdaJ2onECfUJmcnhicEKAko9yZPJjYn0SY7JmkmKid3J1goDyhOJrIldic=" .
我尝试使用以下代码将这两个字符串组合在一起写入png文件。

import base64
with open("testbild.png", "rb") as img_file:
    imageData = base64.b64encode(img_file.read())
print(imageData)

imageHeader = bytearray("1 10 10 1 4 LE")
print(imageHeader)
imageData = "+igSKdAm9CVoJhYnzidqKLsmnyX2JwQo9CYhJgMmaCb5Jo0nMSevJmAnwibIJuEmnyZRJpomNicxJ9gmfSeoJkcmySZAJ/Am2CZZJ78nOSeUJ7km+CWVJpMnyCebJ6UnoiclJ7UmPyY3JgsnwyfGJ7cniSdlJ3oneSajJi8n3ye5Jz4nvCeMJ1onYSdAJ3QnsScLKHsnTCfuJ6MnGCdaJ2onECfUJmcnhicEKAko9yZPJjYn0SY7JmkmKid3J1goDyhOJrIldic="
# Decode base64 String Data
decodedData = base64.b64decode((imageData))
print(decodedData)
print(len(decodedData))
Image = imageHeader + decodedData
  
# Write Image from Base64 File
imgFile = open('image.png', 'wb')
imgFile.write(Image)
imgFile.close()

我的问题是我如何使用头信息添加到ascii代码或base64,所以我得到最终的png文件回来。

5f0d552i

5f0d552i1#

嗯,你的base64编码的数据一旦解码,看起来是200字节长。由于数字10在头部出现了两次,字符串LE我假设数据对应于little-endian uint 16的10 x10像素图像,灰度像素:
如果是这样,你可以像这样提取它:

from PIL import Image
import numpy as np
import base64

# Decode base64
decodedData = base64.b64decode((imageData))

# Treat as 10x10 array of np.uint16
im = np.frombuffer(decodedData, dtype=np.uint16).reshape((10,10))

# Contrast-stretch to full scale 0..65535
scaled = 65535. * (im - im.min())/(im.max() - im.min())

# Make into PIL Image and save
Image.fromarray(scaled.astype(np.uint16)).save('result.png')

你可能想也可能不想我应用的对比度增强使其在StackOverflow上可见。这是(放大的)结果:

相关问题