PyPNG - décodeur/encodeur PNG léger
Bien que la question fasse allusion à JPG, j'espère que ma réponse sera utile à certaines personnes.
Voici comment lire et écrire des pixels PNG en utilisant Module PyPNG :
import png, array
point = (2, 10) # coordinates of pixel to be painted red
reader = png.Reader(filename='image.png')
w, h, pixels, metadata = reader.read_flat()
pixel_byte_width = 4 if metadata['alpha'] else 3
pixel_position = point[0] + point[1] * w
new_pixel_value = (255, 0, 0, 0) if metadata['alpha'] else (255, 0, 0)
pixels[
pixel_position * pixel_byte_width :
(pixel_position + 1) * pixel_byte_width] = array.array('B', new_pixel_value)
output = open('image-with-red-dot.png', 'wb')
writer = png.Writer(w, h, **metadata)
writer.write_array(output, pixels)
output.close()
PyPNG est un seul module Python pur de moins de 4000 lignes, tests et commentaires compris.
LIP est une bibliothèque d'images plus complète, mais elle est aussi beaucoup plus lourde.