【问题标题】:Find which libjpeg is being used by PIL / PILLOW查找 PIL / PILLOW 正在使用哪个 libjpeg
【发布时间】:2014-06-24 21:35:34
【问题描述】:

我收到一个错误,在两台不同的计算机上读取相同的 lena.jpg 文件会产生两个不同的校验和。

更奇怪的是,当我运行 md5sum lena.jpg 时,我在两台机器上得到相同的 md5 和,所以文件是相同的。

此外,当我加载 png 而不是 jpeg 时,数字似乎匹配。这使我相信两台不同机器上的 Pillow 之间存在断开连接,或者至少它们用于读取 jpeg 文件的库之间存在断开连接。

有什么方法可以检查 Pillow 正在使用哪个版本的 libjpeg(最好在 Python 中)?

两台电脑都是 Ubuntu,虽然一台是 12.04,一台是 14.04(我也在 mac 上测试过,得到的值和 14.04 盒子一样)

【问题讨论】:

    标签: python python-imaging-library libjpeg pillow


    【解决方案1】:

    首先,找到您的 Python 安装正在使用的 PIL egg:

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

    然后在该目录中找到_imaging.so 并使用ldd (Linux) 或otool -L (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)
    

    【讨论】:

    • 太好了,你不会知道如何为 windows(使用 mingw)执行此操作吗?我试过 objdump -p _imaging.pyd | grep .dll 并得到: DLL 名称:KERNEL32.dll DLL 名称:USER32.dll DLL 名称:GDI32.dll DLL 名称:python27.dll DLL 名称:MSVCR90.dll c6f24 150 __dllonexit,它没有说明 jpeg
    • @Erotemic 不,抱歉,我不知道。
    【解决方案2】:

    试试这个:

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

    如果你使用的是virtualenv,尝试在你的VIRTUALENV_HOME上找到PIL,通常它在下面

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

    如果您使用的是 ubuntu 软件包,请使用 dpkg 查找您的枕头/PIL 安装位置。

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 1970-01-01
      • 2010-09-19
      • 2017-09-29
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多