>>> m1.putpixel((0,0),(1,2,3))
>>> asarray(m1)[0]
array([[ 1, 2, 3],
[ 1, 0, 252],
[ 1, 0, 252],
...,
[253, 0, 0],
[253, 0, 0],
[253, 0, 0]], dtype=uint8)
>>> m1.save('enc_png.jpg',"JPEG")
>>> m1 = Image.open('enc_png.jpg')
>>> asarray(m1)[0]
array([[ 0, 0, 211],
[ 0, 0, 219],
[ 1, 4, 231],
...,
[253, 0, 0],
[253, 0, 0],
[253, 0, 0]], dtype=uint8)
当我将图像保存为jpg时,像素从(1,2,3)变为(0,0,211)。当我将其另存为png时,效果很好。我该如何解决这个问题?
答案 0 :(得分:1)
JPEG is a lossy compression format,但PNG is lossless。
当您将数据另存为JPEG时,它会因数据丢失而被压缩-这会改善文件的大小,并且不会对图像的质量产生太大的影响(如果您提高压缩级别,质量会降低)。 “数据丢失”是指您的数据的某些部分不可恢复地被其他一些数据所替代,从而使压缩率更好。而且,写入文件的内容没有足够的信息(故意!)来还原原始文件的每个字节。因此,在解压缩时,您的字节(以及其邻居BTW)已被其他内容取代。
PNG压缩数据的方式使得它们可以在解压缩期间完全还原,因此您的所有字节都保持不变。