Python为什么在tobytes()frombytes()之后图像有所不同?

时间:2017-06-16 12:11:47

标签: python image python-imaging-library pillow

我不明白为什么在这3行代码之后死亡图像彼此不同。在我看来,图像应该是相同的。

from PIL import Image

phone_img = Image.open("img2.png")
phone_img1 = Image.frombytes(phone_img.mode, phone_img.size, phone_img.tobytes())
phone_img1.save("img2_new.png","PNG")



img2.png: http://666kb.com/i/dk4ykapuzs4wc2e4g.png
img2_new.png: http://666kb.com/i/dk4ykz98cg97grxts.png

1 个答案:

答案 0 :(得分:0)

我不是PIL / Pillow的大用户,但是:

  • 您使用Image.open()打开图片
    • 返回的对象属于Image
    • 类型
    • 它比纯像素数据更多(正如你所看到的那样使用.mode,.size)
  • 您只需将完整对象解释为像素数据即可创建新图像!
    • 最后一部分可能应该是frombytes(phone_img.mode, phone_img.size, phone_img.getdata())
    • 根据lib,我们也应该关注位模式(例如8位对比16位)