web-dev-qa-db-fra.com

Comment visualiser des images EXTRÊMEMENT grandes?

J'ai une image TIF de 1,8 Go que j'essaie d'ouvrir sur ma machine avec Ubuntu 18.04.1 LTS. J'ai 8 Go de RAM et 2 Go d'espace de swap. Cependant, je ne peux pas ouvrir l'image sur le stock Gnome Image Viewer (dit "Dimensions de l'image TIFF trop grande")), ou Shotwell ( dit "Fichier source photo manquant: [chemin d'accès au fichier]"), ou Gimp (bugs out), ou sur mon Windows 7 VM avec 4 Go de RAM = (dit trop peu RAM même s'il y avait plus de 2,5 Go de libre), ou feh, qui se comporte comme ceci:

$ 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

Existe-t-il un moyen d'ouvrir cette image sur Ubuntu?

(Pour les curieux, l'image est celle-ci . Je l'ai nommée ainsi parce que la première fois que j'ai essayé de l'ouvrir, mon ordinateur s'est écrasé ¯_ (ツ) _/¯)

9
Michael

Pourquoi ne puis-je pas ouvrir l'image dans une visionneuse?

Le problème est probablement RAM et/ou CPU.

L'image TIFF est compressée LZW. Lorsqu'une application souhaite l'afficher, elle doit d'abord décompresser l'image. Et c'est là que RAM et CPU entrent en jeu. De plus, selon l'application, il peut y avoir des tampons qui ont également besoin de RAM.

J'ai fait quelques expériences (non scientifiques) et j'ai remarqué des différences entre les applications en trois phases: lors du chargement de l'image, après le chargement de l'image, lors du zoom avant.

Shotwell a pris jusqu'à 5 Go de RAM lors de l'ouverture du fichier, puis est tombé à 2 Go. Lorsque j'ai zoomé, il est passé à 7 Go.

Gimp est passé à 5 Go et y est resté lors de la visualisation de l'image et du zoom avant. L'utilisation de RAM RAM a progressivement augmenté lors de l'édition) l'image.

GwenView est passé à 3,8 Go lors du chargement et a chuté à 2 Go par la suite. Lors du zoom avant, il est passé à 2,7 Go.

Votre meilleur pari est d'essayer GwenView (la visionneuse d'images par défaut dans Kubuntu, mais peut également être installée dans Ubuntu).

Quelles options ai-je si l'image est trop grande pour la RAM?

En général, si l'image est trop grande pour tenir dans la RAM, vous pouvez la diviser en utilisant convert qui fait partie du package imagemagick.

Vous devez augmenter les limites par défaut définies dans /etc/ImageMagick-6/policy.xml (le chiffre 6 pourrait changer dans les futures versions). Vous devez ajuster la taille maximale en pixels, qui sont définis dans les lignes suivantes:

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

KP signifie KiloPixels, c'est-à-dire mille pixels. Dans votre cas, l'image a 40000x12788 pixels, vous n'avez donc qu'à changer la largeur en quelque chose supérieur à 40KP, par ex. 41KP.

De plus, vous devez augmenter l'espace disque maximal:

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

à quelque chose de raisonnable comme 10GiB.

Pour diviser l'image en parties 5x3 et produire un fichier par partie, utilisez la commande suivante:

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

Pour plus d'informations sur convert, voir man convert ou jetez un œil à documentation .


Peut-être un peu hors sujet, mais voici un script bash rapide et sale qui tuile une image et crée une page html qui affiche une vue d'ensemble où vous pouvez cliquer sur une tuile pour l'ouvrir en pleine résolution. Enregistrez-le par exemple tile_image.sh et l'invoquer comme ./tile_image.sh originalImage tilesX tilesY, où tilesX est le nombre de tuiles horizontalement et tilesY est le nombre de tuiles verticalement.

#!/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
4
danzel

Tester

J'ai testé pour afficher le fichier 1.7 GiB Tiff dans un Dell Precision M4800 avec 16 GiB RAM et Ubuntu 18.04.1) LTS avec Wayland. J'ai testé avec gimp également dans un Dell Latitude E7240 avec 8 GiB RAM et 18.04.1 LTS live persistant avec Xorg.

La consommation totale RAM y compris le système d'exploitation est mesurée avec free -m.

  • gimp - fonctionne mieux pour moi aussi en pleine résolution (sans délai), 6143 Mo de RAM. Il fonctionne bien avec 16 GiB RAM et 8 GiB RAM.

  • shotwell - fonctionne également en pleine résolution (sans délai), 7920 Mio RAM (après certains défilement horizontal et vertical en pleine résolution)

  • gpicview - fonctionne mais plus lentement (n'a pas pu afficher directement la pleine résolution, mais fonctionne lors d'un zoom progressif en pleine résolution, total RAM utilisation lors de l'affichage et du zoom de 3016 Mio RAM, mais 4219 Mio RAM pendant le chargement.

  • feh - ne fonctionne pas 'Pas de chargeur ImLib2 pour ce format de fichier'

  • eog - ne fonctionne pas 'image trop grande'
  • ristretto - ne fonctionne pas (affiche silencieusement une miniature, mais pas d'image)

Conclusion

Cela devrait fonctionner avec Ubuntu et 8 GiB RAM pour afficher cette image avec plusieurs lecteurs et l'éditeur gimp fonctionne très bien pour moi. Avec 6 GiB RAM, vous devez sélectionner une visionneuse légère et avec 4 GiB probablement être prêt à attendre) pour certains échanges.

Veuillez noter que j'ai mesuré l'utilisation totale de RAM (y compris le système d'exploitation).

Commentaire final

C'est une superbe image qui mérite d'être zoomée avec les outils dont vous disposez. Je dois ajouter que le outil de zoom du site Web fonctionne bien avec Firefox pour moi dans un ordinateur avec 4 Go de RAM, je pourrais atteindre un niveau de zoom correspondant à la pleine résolution de le fichier Tiff de 1,7 Go et je pouvais faire défiler horizontalement et verticalement pour voir l'image entière.

2
sudodus