查找PIL/PILLOW使用的libjpeg版本

3 投票
2 回答
3558 浏览
提问于 2025-04-18 10:56

我在两个不同的电脑上读取同一个lena.jpg文件时,发现它们的校验和(checksum)不一样,这让我很困惑。

更奇怪的是,当我在两个机器上运行md5sum lena.jpg时,得到的md5值是一样的,这说明这两个文件其实是完全相同的。

而且,当我用png格式的图片代替jpeg时,校验和又能对上。这让我觉得,可能是两个电脑上用的Pillow库之间有些不一致,或者说它们用来读取jpeg文件的库有问题。

有没有办法检查一下Pillow使用的是哪个版本的libjpeg?最好是在Python里面能查到。

这两台电脑都是Ubuntu系统,不过一台是12.04版本,另一台是14.04版本(我还在一台Mac上测试过,结果和14.04的电脑一样)。

2 个回答

1

试试这个:

ldd path/to/your/PIL/_*.so

如果你在用虚拟环境(virtualenv),可以去你的虚拟环境目录下找PIL,通常它会在这里:

~/.virtualenvs/$VIRTUAL_ENV/lib/python2.7/site-packages/PIL

如果你是在用Ubuntu的包管理工具,可以用dpkg命令来查找你安装的pillow/PIL的位置。

8

首先,找到你安装的Python正在使用的PIL包的位置:

>>> import PIL
>>> PIL.__path__
['/usr/local/python/2.7.3/lib/python2.7/site-packages/PIL']

然后在那个目录里找到 _imaging.so 文件,接着使用 ldd(在Linux上)或者 otool -L(在Mac OS X上)来查看它链接的 libjpeg 的版本:

Linux

$ ldd /usr/local/python/2.7.3/lib/python2.7/site-packages/PIL/_imaging.so
    linux-gate.so.1 =>  (0x00641000)
    libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x00f00000)
    libz.so.1 => /lib/libz.so.1 (0x006f4000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00fad000)
    libc.so.6 => /lib/libc.so.6 (0x0021b000)
    /lib/ld-linux.so.2 (0x0067e000)

Mac OS X

$ otool -L /Users/lukas/src/pillow-env/lib/python2.7/site-packages/PIL/_imaging.so
/Users/lukas/src/pillow-env/lib/python2.7/site-packages/PIL/_imaging.so:
    /usr/local/lib/libjpeg.8.dylib (compatibility version 13.0.0, current version 13.0.0)
    /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
    /usr/local/lib/libtiff.5.dylib (compatibility version 8.0.0, current version 8.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)

撰写回答