【问题标题】:Installing libtiff on Windows (Anaconda) doesn't yield working package. Help pls在 Windows (Anaconda) 上安装 libtiff 不会产生工作包。请帮助
【发布时间】:2018-10-21 00:02:53
【问题描述】:

我想使用 libtiff 将 16 位数据保存到压缩的 TIFF 文件中。我认为它会使用 (ana)conda 安装软件包并完成它,但无济于事。 Miniconda 找到、下载并似乎安装了 libtiff 4.0.9,但在尝试导入包时找不到它。

使用 pip (pip install libtiff) 我也安装了 pylibtiff 0.4.2,但是当尝试使用它导入 libtiff 时,我得到以下信息:

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 文件“C:\Prog\Miniconda3\lib\site-packages\libtiff__init__.py”,第 20 行,在 从 .libtiff_ctypes 导入 libtiff、TIFF、TIFF3D 文件“C:\Prog\Miniconda3\lib\site-packages\libtiff\libtiff_ctypes.py”,第 46 行,在 raise ImportError('未能找到 TIFF 库。请确保 libtiff ' ImportError:未能找到 TIFF 库。确保已安装 libtiff >其位置列在 PATH|LD_LIBRARY_PATH|..

在 miniconda 中我的 \pkgs 目录中安装了二进制文件,但我的 python 环境显然找不到这些二进制文件,即使将 .dll 目录 (\Miniconda3\pkgs\libtiff-4.0.9-hb8ad9f9_1\Library\bin) 添加到系统路径也是如此。

如何解决这个问题?我尝试下载 Libtiff 源代码并在 Windows 下构建它(使用 cmake 和 Visual Studio - 不成功,因为我的 C 构建技能非常初级)。

有什么建议吗?

【问题讨论】:

    标签: windows python-3.x pip conda libtiff


    【解决方案1】:

    首先,解决手头的问题不需要 libtiff —— scikit-image 就足够了。为了让事情变得不那么明显,默认的 skimage.io.imsave() 方法似乎更喜欢通过 PIL 工作(请注意,TIFF 有一个例外)。这里有点棘手,因为 PIL 对压缩 TIFF 文件的支持要么不稳定,要么需要 libtiff。

    默认情况下会尝试不同的插件(从 Python 开始) 影像库),直到找到合适的候选人。如果不给 fname 为 tiff 文件,将使用 tifffile 插件。

    "从 5.0.0 版本开始,Pillow 需要 libtiff 才能读取或写入 压缩文件。在该版本之前,Pillow 对 无需使用即可读取 Packbits、LZW 和 JPEG 压缩 TIFF libtiff。”

    其次,如果您必须使用 libtiff,请不要尝试混合使用 condapip 包。在我的情况下,他们似乎下载了不同且不兼容的软件包版本。 [conda 包安装 libtiff 二进制文件,但不安装 python 包装器。因此,即使库存在,导入 libtiff(如一些在线文档所建议的那样)也不起作用]

    但回到解决方案:

    然而,Scikit-image 带有一个保存 TIFF 文件的外部工具(使用 ZIP 或 LZMA 压缩):skimage.external.tifffile.imsave() -- 请参阅http://scikit-image.org/docs/dev/api/skimage.external.tifffile.html

    总结:使用 scikit-image,您可以使用以下命令无损地保存 Zip 压缩的 16 位 TIFF 文件(此处显示为中等 Zip 算法压缩):

    skimage.external.tifffile.imsave("Compressed.tif", image, compress=5)
    

    【讨论】:

    • tifffile 模块不使用libtiff 库。 Tifffile 的 zip 解压缩使用 Python 内置的 zlib 模块。
    • 推荐的保存 TIFF 的 API 是:io.imsave('/tmp/compressed.tiff', image, plugin='tifffile', compress=5)tifffile 插件应该默认用于TIFFs,所以你也可以使用io.imsave('/tmp/compressed.tiff', image, compress=5)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多