1 votes

Comment ouvrir une partie spécifique d'une figure .png dans le terminal d'Ubuntu ?

Situation : commencer à parcourir les figures à la largeur 1:960 et à la hauteur pleine en Terminal
Motivation : La visionneuse d'images par défaut d'Ubuntu ouvre l'image au maximum. largeur et complet hauteur ce qui rend difficile l'exploration de chiffres très larges. CTRL + - de l'image complète n'est pas suffisante lorsque vous itérez de nombreuses images dans lesquelles largeur x hauteur
Conditions différentielles : Régler la luminosité et le contraste d'un avion avec Gimp/ImageMagick/ ? , ... Résolution de l'image en Largeur x Hauteur et les marges en pixels à chaque itération

Iteration Image Resolution Left Right Top Bottom
1         960 x    960     110  80    70  100    
2         960 x   1920     230  180   70  100
3         960 x   2880     350  280   70  100
4         960 x   3840     470  380   70  100
5         960 x   4800     590  480   70  100
6         960 x   5760     710  580   70  100
7         960 x   6720     830  680   70  100
8         960 x   7680     950  780   70  100
9         960 x   8640     1070 880   70  100  
10        960 x   9600     1190 980   70  100 

% whtyger and Gimp use to find out the margins http://askubuntu.com/a/803012/25388
  • Données de test fictives de la résolution d'image 960x1920 à la 2e itération, 960x4800 à la 5e itération, 960x8640 à la 9e itération et 960x9600 à la 10e itération, respectivement.

    enter image description here enter image description here enter image description here enter image description here

Mon pseudo-code

#!/bin/bash

OUTRES=$1
ITER=$2
IMAGE=$3

top=70
height=960 

width=$(( 960*${ITER} ))
left=$(( 110+${ITER}*120 ))
right=$(( 80+${ITER}*100 ))
x=$(( ${width}-${left}-${right} ))
y=$(( ${height}-${bottom}-${top} ))

display -geometry ${OUTRES}x${OUTRES} \
        -extract ${x}x${y}+${left}+${top} "$IMAGE"

Tentative avec des marges instables avec display y extract

le code de whtyger fonctionne mais il a des marges instables c'est à dire que leur taille diffère selon l'image, ici 5ème itération

enter image description here enter image description here

  • Dans l'image de droite, vous voyez que tout le texte de la barre de couleur n'est pas inclus dans la sortie.
  • Dans l'image de gauche, vous voyez que la marge_gauche n'est pas égale à la marge_haut.

Raison : MARGIN_T , MARGIN_B , MARGIN_L , MARGIN_R
Correction : utiliser la numérotation scientifique pour les itérations plus importantes ou augmenter le nombre d'itérations. MARGIN_R ; quelques ajustements dans le code

MARGIN_T=60
MARGIN_B=90
MARGIN_L=$(( -5 + $ITER * 119 ))
MARGIN_R=$(( -20 + $ITER * 95 ))

Sortie : toujours une marge autour des données

En examinant le commentaire de whtyger pour la tentative d'absence de marges avec convert y crop

Pour se débarrasser complètement des marges, vous pouvez modifier l'image originale. Utilisez convert image.png -crop SIZE_XxSIZE_Y+SHIFT_X+SHIFT_Y > edited.png et utilisez ensuite le visualiseur de votre choix. Vous pouvez adapter mon script pour cela, il suffit de remplacer display+-extract par convert+-crop.

Je remplace la dernière ligne par la sortie suivante mais sans succès

convert "$IMAGE" -crop ${EXTRACT_X}x${EXTRACT_Y}+${MARGIN_L}+${MARGIN_T} \ 
    "${IMAGE%.png}_cropped.png"

display -geometry ${OUTRES}x${OUTRES}+${SHIFT}+${SHIFT} \
    -extract ${EXTRACT_X}x${EXTRACT_Y}+${MARGIN_L}+${MARGIN_T} \
    "${IMAGE%.png}_cropped.png"

rm "${IMAGE%.png}_cropped.png"

Sortie : marge d'environ 1 px dans toutes les directions, la marge gauche coupe certaines informations des nombres de >= 1000.

Système : Linux Ubuntu 16.04 64 bit
Matériel : Macbook Air 2013-moyen

3voto

whtyger Points 5510

Il existe une puissante suite d'images appelée ImageMagick. Parmi ses outils, vous pouvez trouver un display qui est utilisé, comme son nom l'indique, pour afficher divers formats graphiques à partir de la console. Voici plusieurs exemples de son utilisation :

display -geometry 500x500 image.png

Cela ouvrira votre image dans la fenêtre avec la taille sélectionnée. De plus, une petite fenêtre représentant l'image complète sera ouverte à proximité, ce qui vous permettra de déplacer le rectangle de sélection pour afficher les parties souhaitées de votre image.

display -extract 300x300+50+50 image.png

Cette commande vous montrera la partie de votre image avec la taille de 300x300 pixels et avec le décalage de 50 pixels de son coin supérieur gauche.

Vous trouverez la liste complète de ses options à l'adresse suivante man display . Il y a aussi un manuel complet ici .

ImageMagick fournit également d'autres outils utiles. Par exemple, il affichera les informations sur l'image (son type, ses dimensions, sa taille) :

identify "my image.png"

Afin d'afficher votre image sans les marges, nous devons les mesurer pour les recadrer plus tard. J'ai ouvert votre image factice dans Gimp pour accélérer les choses. Donc les marges sont :

Left   - 1070px
Right  -  880px
Top    -   70px
Bottom -  100px

Si la taille originale de votre photo est 8640x960 alors la taille de l'image sans les marges sera : X=8640-1070-880=6690 y Y=960-70-100=790 c'est-à-dire 6690x790 .
Et maintenant, nous allons combiner -geometry y -extract options pour produire la sortie :

display -geometry 500x500 -extract 6690x790+1070+70 raw.png

(définir la taille de la fenêtre de sortie à 500x500, recadrer l'image à la nouvelle taille 6690x790 et décaler la zone de recadrage de 1070px horizontalement et de 70px verticalement à partir du coin supérieur gauche de l'image).

Voici ce que j'ai obtenu (j'ai déplacé la sélection vers la droite pour plus de clarté) :

Fragment

Tous ces calculs sont un peu fastidieux, mais si vous avez des marges statiques (il semble que vos images soient produites automatiquement), vous pouvez les calculer une fois et les appliquer à toutes vos images. Ou même faire un script pour automatiser cela (c'est une version améliorée du script - il calcule l'itération à l'aide de. identify d'ImageMagick) :

#!/bin/bash

if [ $# -lt 2 ] ; then echo "usage: reviewimage output_resolution image_name" ; exit ; fi

OUTRES=$1
IMAGE=$2

# Some sanity or error checks, change as you see fit
if [ $OUTRES -lt 100 ] || [ $OUTRES -gt 1000 ] ; then echo "error: Invalid resolution" ; exit ; fi
if ! [ -e "$IMAGE" ] ; then echo "error: Image doesn't exist" ; exit ; fi

SHIFT=50    # Relative position of output window from top left corner of the desktop
IMAGE_X=$(identify "$IMAGE" | grep -o '[0-9]*x960 ' | cut -d'x' -f1)
IMAGE_Y=960
ITER=$(( $IMAGE_X / 960 ))
MARGIN_T=70
MARGIN_B=100
MARGIN_L=$(( -5 + $ITER * 119 ))
MARGIN_R=$(( -40 + $ITER * 102 ))
EXTRACT_X=$(( $IMAGE_X - $MARGIN_L - $MARGIN_R ))
EXTRACT_Y=$(( $IMAGE_Y - $MARGIN_T - $MARGIN_B ))

display -geometry ${OUTRES}x${OUTRES}+${SHIFT}+${SHIFT} -extract ${EXTRACT_X}x${EXTRACT_Y}+${MARGIN_L}+${MARGIN_T} "$IMAGE"

Enregistrez ce script sous le nom de reviewimage quelque part. Ensuite, exécutez les commandes ci-dessous :

sudo cp reviewimage /usr/local/bin/
sudo chmod 755 /usr/local/bin/reviewimage

Maintenant vous pouvez appeler cette commande à partir de chaque dossier contenant vos images. Par exemple, pour ouvrir un aperçu de votre image raw10.png avec la taille de 700x700 :

reviewimage 700 raw10.png

Si le nom comporte des espaces, utilisez des guillemets :

reviewimage 700 "raw 2.png"

Si la formule de calcul de la marge devient imprécise avec un grand nombre d'itérations, vous pouvez utiliser un tableau de valeurs de marge. Ajustez chaque valeur de marge comme vous le souhaitez. script ci-dessous montre le principe. Il est rempli avec les valeurs pour les itérations 1 à 10, ajoutez-en plus à l'intérieur des parenthèses avec l'espace comme séparateur :

#!/bin/bash

if [ $# -ne 1 ] ; then echo "usage: convertimage image_name" ; exit ; fi
if ! [ -e "$1" ] ; then echo "error: Image doesn't exist" ; exit ; fi

IMAGE=$1

IMAGE_X=$(identify "$IMAGE" | grep -o '[0-9]*x960 ' | cut -d'x' -f1)
IMAGE_Y=960
ITER=$(( $IMAGE_X / 960 ))
MARGIN_T=70
MARGIN_B=100
MARGIN_L=(0 114 233 352 471 590 709 828 947 1066 1185)
MARGIN_R=(0 80 180 280 380 480 580 680 780 880 980)
EXTRACT_X=$(( $IMAGE_X - ${MARGIN_L[$ITER]} - ${MARGIN_R[$ITER]} ))
EXTRACT_Y=$(( $IMAGE_Y - $MARGIN_T - $MARGIN_B ))

convert "$IMAGE" -crop ${EXTRACT_X}x${EXTRACT_Y}+${MARGIN_L[$ITER]}+${MARGIN_T} "${IMAGE%.png}_cropped.png"

Ce script effectue le recadrage de l'image au lieu de l'afficher, de sorte que cette image convertie peut être visualisée dans n'importe quel programme. Il n'a besoin que d'un seul paramètre - le nom de l'image :

convertimage "raw 9.png"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X