我正在使用产品,我可以向它发送BMP文件,但它只接受没有标题的BMP,所以我删除了标题。 然而,该产品可以向我发送其BMP文件,我想在网页上显示它们,所以我需要重新创建标题以使其正常工作。
解决方案可能是将标题存储在我的文件系统或数据库中,但我想知道是否有重新创建标题的解决方案,例如pillow
。
目前我只打开我的BMP(24位,无标题)文件:
logo_file = open(django_settings.UPLOAD_DIR+'logos/1568/logo1-no-header.bmp', 'rb').read()
也许可以将二进制数据转换为像素并使用pillow
创建新图像,插入像素并保存到BMP?
答案 0 :(得分:0)
你看过construct了吗?它支持BMP。
我建议先看看这些早期的问题,但不一样,但有一些例子可以提供帮助。 how to create bmp file
答案 1 :(得分:0)
为了使用Pillow将24位/像素BMP的原始像素数据按到一个完整的图像文件中,需要做两件事:
假设您在名为test.dat
的文件中有33456个字节的原始像素数据:
#!/usr/bin/env python
from __future__ import absolute_import, division, print_function
from PIL import Image
def main():
with open('test.dat', 'rb') as data_file:
raw_data = data_file.read()
red, green, blue = Image.frombytes('RGB', (164, 68), raw_data).split()
image = Image.merge('RGB', (blue, green, red))
image = image.transpose(Image.FLIP_TOP_BOTTOM)
image.save('result.bmp')
if __name__ == '__main__':
main()
这是一个创建示例test.dat
的小程序:
#!/usr/bin/env python3
import base64
import gzip
DATA = b'''\
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'''
def main():
with open('test.dat', 'wb') as file:
file.write(gzip.decompress(base64.decodebytes(DATA)))
if __name__ == '__main__':
main()