Mic*_*ael 11 shotwell gimp software-recommendation image-viewers
我有一个 1.8GB TIF 图像,我试图在我的机器上使用 Ubuntu 18.04.1 LTS 打开它。我有 8GB 的 RAM 和 2GB 的交换空间。但是,我无法在库存的 Gnome 图像查看器(说“TIFF 图像的尺寸太大”)或 Shotwell(说“缺少照片源文件:[文件路径]”)或 Gimp(错误out),或者在我的具有 4GB RAM 的 Windows 7 VM 上(即使它有超过 2.5GB 的可用空间,也说 RAM 太少),或者 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
Run Code Online (Sandbox Code Playgroud)
有没有办法在 Ubuntu 上打开这个图像?
(好奇的是,图片就是这个。我这样命名是因为我第一次尝试打开它时我的电脑崩溃了¯_(?)_/¯ )
问题可能是 RAM 和/或 CPU。
TIFF 图像是 LZW 压缩的。当应用程序想要显示它时,它需要先解压缩图像。这就是 RAM 和 CPU 发挥作用的地方。此外,根据应用程序的不同,可能存在也需要 RAM 的缓冲区。
我做了一些(非科学的)实验,注意到应用程序在三个阶段之间的差异:加载图像时、加载图像后、放大时。
Shotwell在打开文件时占用了多达 5GB 的 RAM,然后下降到 2GB。当我放大时,它上升到 7GB。
Gimp增加到 5GB,并在查看图像和放大时保持在那里。编辑图像时 RAM 使用量逐渐增加。
GwenView在加载时上升到3.8GB,然后下降到 2GB。放大时,它上升到 2.7GB。
您最好的选择是尝试 GwenView(Kubuntu 中的默认图像查看器,但也可以安装在 Ubuntu 中)。
通常,如果图像太大而无法放入 RAM,您可以使用convert哪个是imagemagick包的一部分来拆分它。
您需要增加/etc/ImageMagick-6/policy.xml(数字 6 在未来版本中可能会更改)中定义的默认限制。您需要调整以像素为单位的最大尺寸,这在以下几行中定义:
<policy domain="resource" name="width" value="16KP"/>
<policy domain="resource" name="height" value="16KP"/>
Run Code Online (Sandbox Code Playgroud)
KP 表示 KiloPixels,即千像素。在您的情况下,图像有 40000x12788 像素,因此您只需要将宽度更改为大于40KP 的值,例如 41KP。
此外,您需要增加最大磁盘空间:
<policy domain="resource" name="disk" value="1GiB"/>
Run Code Online (Sandbox Code Playgroud)
像 10GiB 这样合理的东西。
要将图像拆分为 5x3 部分并为每个部分生成一个文件,请使用以下命令:
convert -crop 5x3@ inputfile.tif outputfile%0d.tif
Run Code Online (Sandbox Code Playgroud)
有关更多信息convert,请参阅man convert或查看文档。
也许有点偏离主题,但这里有一个快速而肮脏的 bash 脚本,它可以平铺图像并创建一个 html 页面,该页面显示概述,您可以在其中单击平铺以全分辨率打开它。将其另存为 egtile_image.sh并像 一样调用它./tile_image.sh originalImage tilesX tilesY,其中 tileX 是水平方向的瓷砖数量,而 tileY 是垂直方向的瓷砖数量。
#!/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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5050 次 |
| 最近记录: |