Search on blog:

PyPNG struct.error

W trakcie zapisu do pliku PNG z użycie PyPNG trafiłem na błąd struct.error.

bitdepth=16 pozwala przechować wartości od 0 do 65535 (inaczej (256*256)-1 )

Jeśli wartość jest większa niż 65535 to pojawia się komunikat:

struct.error: 'H' format requires 0 <= number <= 65535

Jeśli wartość jest mniejsza niż 0 to pojawia się komunikat:

struct.error: argument out of range

Oba świadczą, że należy dane przeskalować do przedziału 0..65535 .

Przykładowy kod

import png

data = list()

for r in range(100): # r - row number
    row = list()
    for c in range(100): # c - column number
        if r == c:
            row.append(0) # OK (black)
        else:
            row.append((256*256)-1) # OK (white) (65535)

            #row.append((256*256)) # ERROR - value too big for bitdepth=16
            # struct.error: 'H' format requires 0 <= number <= 65535

            #row.append(-1) # ERROR - value too small for bitdepth=16
            # struct.error: argument out of range

    data.append(row)

out = png.Writer(width=100, height=100, greyscale=True, bitdepth=16)
out.write(open('output.png', 'wb'), data)
If you like it
Buy a Coffee