J'ai une matrice dans le type d'un tableau de Numpy. Comment pourrais-je l'écrire sur le disque en tant qu'image? Tous les formats fonctionnent (png, jpeg, bmp ...). Une contrainte importante est que la LIP n'est pas présente.
Réponses
Trop de publicités?
Steve Tjoa
Points
15116
ideasman42
Points
1682
Pur Python, un extrait de code sans les 3e partie des dépendances.
Cette fonction écrit vraie couleur RGBA PNG à l'aide de Python gzip
module.
def write_png(buf, width, height):
""" buf: must be bytes or a bytearray in py3, a regular string in py2. formatted RGBARGBA. """
import zlib, struct
# reverse the vertical line order and add null bytes at the start
width_byte_4 = width * 4
raw_data = b''.join(b'\x00' + buf[span:span + width_byte_4]
for span in range((height - 1) * width * 4, -1, - width_byte_4))
def png_pack(png_tag, data):
chunk_head = png_tag + data
return (struct.pack("!I", len(data)) +
chunk_head +
struct.pack("!I", 0xFFFFFFFF & zlib.crc32(chunk_head)))
return b''.join([
b'\x89PNG\r\n\x1a\n',
png_pack(b'IHDR', struct.pack("!2I5B", width, height, 8, 6, 0, 0, 0)),
png_pack(b'IDAT', zlib.compress(raw_data, 9)),
png_pack(b'IEND', b'')])
... Les données doivent être écrites directement dans un fichier ouvert en binaire, comme dans:
data = write_png(buf, 64, 64)
with open("my_image.png", 'wb') as fd:
fd.write(data)
Source d'origine: https://developer.blender.org/diffusion/B/browse/master/release/bin/blender-thumbnailer.py$155
Exemple d'utilisation grâce à @Evgeni Sergeev: http://stackoverflow.com/a/21034111/432509
DopplerShift
Points
612