如何查看极大图像?

如何查看极大图像?

我有一张 1.8GB 的​​ TIF 图像,我正尝试在装有 Ubuntu 18.04.1 LTS 的机器上打开它。我有 8GB 的​​ RAM 和 2GB 的交换空间。但是,我无法在普通的 Gnome 图像查看器(显示“TIFF 图像的尺寸太大”)、Shotwell(显示“缺少照片源文件:[文件路径]”)、Gimp(出错)或具有 4GB RAM 的 Windows 7 VM(显示 RAM 太少,尽管有超过 2.5GB 的可用空间)或 feh(其行为如下)上打开该图像:

$ feh DO_NOT_OPEN.tif
TIFFFetchNormalTag: Warning, Incompatible type for "RichTIFFIPTC"; tag ignored.
feh WARNING: DO_NOT_OPEN.tif - No Imlib2 loader for that file format
feh: No loadable images specified.
See 'man feh' for detailed usage information

有什么办法可以在 Ubuntu 上打开这个图像吗?

(对于好奇的人来说,图像是这个。我这样命名是因为我第一次尝试打开它时导致我的电脑崩溃了 ¯_(ツ)_/¯ )

答案1

为什么我无法在任何查看器中打开图像?

问题可能出在 RAM 和/或 CPU 上。

TIFF 图像是 LZW 压缩的。当应用程序想要显示它时,它需要先解压缩图像。这就是 RAM 和 CPU 发挥作用的地方。此外,根据应用程序的不同,可能有些缓冲区也需要 RAM。

我做了一些(非科学的)实验,并注意到应用程序在三个阶段的差异:加载图像时、加载图像后、放大时。

肖特韦尔打开文件时占用 5GB RAM,然后降至 2GB。当我放大时,它上升到 7GB。

瘸子在查看图像和放大时,RAM 占用率上升到了 5GB,并且保持不变。在编辑图像时,RAM 占用率逐渐增加。

格温维尤加载时占用 3.8GB,加载后又降到 2GB。放大后占用 2.7GB。

最好的选择是尝试 GwenView(Kubuntu 中的默认图像查看器,但也可以安装在普通的 Ubuntu 中)。

如果图像对于 RAM 来说太大,我有什么办法呢?

一般来说,如果图像太大而无法放入 RAM,您可以使用包convert的一部分来拆分它imagemagick

您需要增加在中定义的默认限制/etc/ImageMagick-6/policy.xml(在未来版本中,数字 6 可能会发生变化)。您需要调整像素的最大尺寸,在以下几行中定义:

<policy domain="resource" name="width" value="16KP"/>
<policy domain="resource" name="height" value="16KP"/>

KP 表示 KiloPixels,即千像素。在您的例子中,图像有 40000x12788 像素,因此您只需将宽度更改为比...更棒40KP,例如41KP。

此外,您还需要增加最大磁盘空间:

<policy domain="resource" name="disk" value="1GiB"/>

达到 10GiB 这样合理的值。

要将图像分割成 5x3 个部分并为每个部分生成一个文件,请使用以下命令:

convert -crop 5x3@ inputfile.tif outputfile%0d.tif

有关更多信息convert,请参阅男人皈依或者看看文档


可能有点离题,但这里有一个快速而粗略的 bash 脚本,它可以平铺图像并创建一个显示概览的 html 页面,您可以单击其中的某个图块以全分辨率打开它。将其保存为 egtile_image.sh并像 一样调用它./tile_image.sh originalImage tilesX tilesY,其中 tilesX 是水平方向的图块数量,tilesY 是垂直方向的图块数量。

#!/bin/bash
INPUT_FILE=$1
TILES_X=$2
TILES_Y=$3
OUTPUT_FILE=${INPUT_FILE%.*}_tile_%0d.png
convert -crop $TILES_X"x"$TILES_Y\@ $INPUT_FILE $OUTPUT_FILE
HTML_FILE=${INPUT_FILE%.*}_tile_view.html
echo "<html><body><style type="text/css">table,tr,td,a {padding:0;border-spacing:0} img:hover {opacity:.9}</style><table>" > $HTML_FILE
X=0
Y=0
while [ $Y -lt $TILES_Y ]; do
    echo "<tr>" >> $HTML_FILE
    while [ $X -lt $TILES_X ]; do
        TILE_NUMBER=$(echo $Y*$TILES_X+$X | bc -l)
        TILE_NAME=${INPUT_FILE%.*}_tile_$TILE_NUMBER.png
        THUMBNAIL=${INPUT_FILE%.*}_tile_$TILE_NUMBER"_thumb.png"
        convert -resize 100x100 $TILE_NAME $THUMBNAIL
        echo "<td><a href=\""$(basename $TILE_NAME)"\"><img src=\""$(basename $THUMBNAIL)"\"></a></td>" >> $HTML_FILE
        let X=X+1
    done
    let X=0
    echo "</tr>" >> $HTML_FILE
    let Y=Y+1
done
echo "</table></body></html>" >> $HTML_FILE

答案2

测试

我测试了在具有 16 GiB RAM 和 Ubuntu 18.04.1 LTS 的 Dell Precision M4800 中查看 1.7 GiB Tiff 文件,该操作系统是 Wayland。我gimp还在具有 8 GiB RAM 和 18.04.1 LTS 的 Dell Latitude E7240 中进行了测试持久直播使用 Xorg。

包括操作系统在内的总 RAM 使用量是用 来测量的free -m

  • gimp- 对我来说,在全分辨率(无延迟)、6143 MiB RAM 下也能发挥最佳效果。在 16 GiB RAM 和 8 GiB RAM 下都能很好地运行。

  • shotwell- 也可在全分辨率下工作(无延迟),7920 MiB RAM(在全分辨率下进行一些水平和垂直滚动后)

  • gpicview- 可以运行但速度较慢(无法直接显示全分辨率,但逐渐放大到全分辨率时可以运行,显示和缩放时的总 RAM 使用量为 3016 MiB RAM,但加载期间为 4219 MiB RAM。

  • feh- 无法使用‘该文件格式没有 ImLib2 加载器’

  • eog- 无法处理“图像太大”
  • ristretto- 不起作用(静默显示缩略图,但没有图片)

结论

它应该与 Ubuntu 和 8 GiB RAM 配合使用,以便使用多个查看器查看此图片,并且编辑 gimp对我来说效果很好。如果是 6 GiB RAM,你应该选择一个轻量级查看器,如果是 4 GiB,可能要准备等待一些交换。

请注意,我已经测量了 RAM 的总使用量(包括操作系统)。

最后评论

这是一张很棒的照片,值得用你手头的工具放大来看。我应该补充一点,缩放工具网站对我来说,在具有 4 GB RAM 的计算机上,Firefox 运行良好,我可以达到与 1.7 GB Tiff 文件的全分辨率相对应的缩放级别,并且可以水平和垂直滚动以查看整个图片。

相关内容