blog.furas.pl
# prywatne notatki - Python, Linux, Machine Learning, etc.

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)
Książki: python-dla-kazdego-podstawy-programowania python-wprowadzenie python-leksykon-kieszonkowy python-receptury python-programuj-szybko-i-wydajnie python-projekty-do-wykorzystania black-hat-python-jezyk-python-dla-hackerow-i-pentesterow efektywny-python-59-sposobow-na-lepszy-kod tdd-w-praktyce-niezawodny-kod-w-jezyku-python aplikacje-internetowe-z-django-najlepsze-receptury