V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ppzbreeze
V2EX  ›  程序员

老哥们有没有用过 PIL 处理图像的,遇到一个奇异的问题

  •  
  •   ppzbreeze · 2020-01-20 10:09:22 +08:00 · 1920 次点击
    这是一个创建于 1768 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在用 PIL 处理 jpg 图像的时候,我把图像的 RGB 分别设置成 255,255,254,保存成文件,但是再打开之后就变成 255,255,253 了,这是什么奇怪的现象?

    def test():
    width_qr = img_test.size[0]
    height_qr = img_test.size[1]
    for i in range(0,width_qr):
    for j in range(0,height_qr):
    img_test.putpixel((i, j), (255, 255, 254, 1))
    img = img_test.convert("RGB")
    img.save("F:/p/test2.jpg")
    img_test1 = Image.open("F:/p/test2.jpg")
    width_test = img_test1.size[0]
    heigth_test = img_test1.size[1]
    for i in range(0,width_test):
    for j in range(0,heigth_test):
    data = (img_test1.getpixel((i, j)))
    print(data)
    10 条回复    2020-01-20 13:17:51 +08:00
    MinQ
        1
    MinQ  
       2020-01-20 10:29:09 +08:00
    jpg 的锅,作为压缩图片,jpg 不保证存储的时候值的一致性。想要保证图片在保存后的一致性,请用 png 格式
    JConlee
        2
    JConlee  
       2020-01-20 10:29:41 +08:00
    试了一下,jpg 改成 png 就正常了
    jdhao
        3
    jdhao  
       2020-01-20 10:32:26 +08:00
    应该是 JPG 图片在保存的时候一些压缩算法,更改了像素值。
    ppzbreeze
        4
    ppzbreeze  
    OP
       2020-01-20 11:19:47 +08:00
    @MinQ 有时候波动不止 1,可能达到 2-3 甚至 4,看来还是要 png 靠谱些

    @jdhao 老哥有深入研究过这个吗
    qieqie
        5
    qieqie  
       2020-01-20 11:29:16 +08:00 via iPhone
    jpeg save 的时候可以设置 quality
    nightwitch
        6
    nightwitch  
       2020-01-20 11:34:16 +08:00
    jpg 是压缩格式,涉及到浮点运算和采样,尤其是采样,难免会有波动
    jdhao
        7
    jdhao  
       2020-01-20 12:02:53 +08:00 via Android
    @ppzbreeze 没有深入研究,记得在 stack overflow 看到过,你的需求没说清楚,具体要做什么用呢
    Death
        8
    Death  
       2020-01-20 12:06:23 +08:00
    普通的 jpeg 是有损压缩
    no1xsyzy
        9
    no1xsyzy  
       2020-01-20 12:58:21 +08:00
    “有损”
    看下 JPEG 的原理就行了
    简单地说,通过了一个低通滤波器
    GrayXu
        10
    GrayXu  
       2020-01-20 13:17:51 +08:00
    因为 PIL save to jpg 有压缩,你搞个正常图进去出来一次就发现细节损失了。指定下 quality 参数就好了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2501 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:32 · PVG 09:32 · LAX 17:32 · JFK 20:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.