【问题标题】:python PIL's putpixel function not working properly with jpgpython PIL的putpixel函数不能与jpg一起正常工作
【发布时间】:2019-12-06 23:08:22
【问题描述】:
>>> 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 时,它工作正常。我该如何解决这个问题?

【问题讨论】:

    标签: python image-processing python-imaging-library


    【解决方案1】:

    JPEG is a lossy compression format,但PNG is lossless

    当您将数据保存为 JPEG 时,它会因数据丢失而被压缩 - 这会增加文件的大小并且不会对图像质量产生太大影响(如果您提高压缩级别,质量会下降)。 “数据丢失”是指您的某些数据不可恢复地被其他一些使压缩率更好的数据替代。写入文件的内容没有足够的信息(故意!)来恢复原始文件的每个字节。所以在解压你的字节时——连同他们的邻居,顺便说一句——被别的东西取代了。

    PNG 压缩数据的方式是在解压缩过程中可以完全恢复,因此所有字节都保持不变。

    【讨论】:

    • 有什么办法可以防止 PIL 中的这种压缩,我需要确切的值来做我想做的事情。
    • @3xpl017, this answer 可能会提供一些见解
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2018-11-10
    • 2014-07-01
    • 1970-01-01
    • 2016-07-19
    相关资源
    最近更新 更多