![如何查看极大图像?](https://linux22.com/image/1163040/%E5%A6%82%E4%BD%95%E6%9F%A5%E7%9C%8B%E6%9E%81%E5%A4%A7%E5%9B%BE%E5%83%8F%EF%BC%9F.png)
我有一张 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
可能有点离题,但这里有一个快速而粗略的 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 文件的全分辨率相对应的缩放级别,并且可以水平和垂直滚动以查看整个图片。