Como Abrir Parte Específica da Figura .png no Terminal do Ubuntu?

1

Situação: comece a navegar pelas figuras na largura 1: 960 e a altura completa no Terminal
Motivação: O visualizador de imagens padrão do Ubuntu abre a figura na largura total e na altura total , dificultando a navegação de figuras muito amplas; seu CTRL + - da imagem completa não é suficiente quando você itera muitas imagens onde largura x altura
Condições Diferenciais: Para Ajustar o Brilho-Contraste no Avião com o Gimp / ImageMagick /…? , ... Resolução da imagem como Largura x Altura e Margens em pixels em cada iteração

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
  • Dados de teste fictício de resolução de imagem 960x1920 na 2ª iteração, 960x4800 na 5ª iteração, 960x8640 na 9ª iteração e resolução 960x9600 na 10ª iteração, respectivamente

Meupseudocódigo

#!/bin/bashOUTRES=$1ITER=$2IMAGE=$3top=70height=960width=$((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"

Tente com margens instáveis com display e extract

o código de whtyger funciona, mas tem algumas margens instáveis, ou seja, seu tamanho difere dependendo da imagem, aqui 5ª iteração

   

  • Nafotoàdireita,vocêvêquenemtodootextodabarradecoresestáincluídonasaída.
  • Nafotodaesquerda,vocêvêquemargin_leftnãoéigualamargin_top.

Razão:MARGIN_T,MARGIN_B,MARGIN_L,MARGIN_R
Correção:usenumeraçãocientíficacomiteraçõesmaioresouaumenteMARGIN_R;algunsajustesnocódigo

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

Saída:algumamargememtornodosdadossempre

Revisandoocomentáriodowhtygerparatentativadeausênciademargenscomconvertecrop

Togetridofmarginscompletelyyoucanmodifytheoriginalimage.Useconvertimage.png-cropSIZE_XxSIZE_Y+SHIFT_X+SHIFT_Y>edited.pngandthenuseanyvieweryoulike.Youcanadaptmyscriptforthat,justreplacedisplay+-extractwithconvert+-crop.

Eusubstituoaúltimalinhapelasaídaseguinte,massemsucesso

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"

Saída: cerca de 1 px de margem em todas as direções, a margem esquerda mostra algumas informações de > = 1000.

Sistema: Linux Ubuntu 16.04 64 bit
Hardware: Macbook Air 2013-mid

    
por Léo Léopold Hertz 준영 23.07.2016 / 09:37

1 resposta

3

Existe um poderoso conjunto de imagens chamado ImageMagick. Entre suas ferramentas, você pode encontrar um utilitário display , que é usado, como é óbvio a partir de seu nome, para exibir vários formatos gráficos do console. Aqui estão vários exemplos de seu uso:

display -geometry 500x500 image.png

Isso abrirá sua imagem na janela com o tamanho selecionado. Além disso, uma pequena janela representando a imagem completa será aberta por perto, para que você possa mover o retângulo de seleção para mostrar as partes desejadas da sua imagem.

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

Este comando mostrará a parte da sua imagem com o tamanho de 300x300 pixels e com o deslocamento de 50 pixels a partir do canto superior esquerdo.

Você pode encontrar a lista completa de suas opções em man display . Também há um extenso manual aqui .

O ImageMagick também oferece outras ferramentas úteis. Por exemplo, isso mostrará as informações sobre a imagem (seu tipo, dimensões, tamanho):

identify "my image.png"

Para exibir sua imagem sem as margens, devemos medi-las para cortá-las mais tarde. Eu abri sua foto fictícia no Gimp para tornar as coisas mais rápidas. Então as margens são:

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

Se o tamanho original da foto for 8640x960 , o tamanho da imagem sem as margens será: X=8640-1070-880=6690 e Y=960-70-100=790 , ou seja, 6690x790 .
E agora combinaremos as opções -geometry e -extract para produzir a saída:

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

(ajuste o tamanho da janela de saída para 500x500, corte a imagem no novo tamanho 6690x790 e desloque a área de corte em 1070px na horizontal e em 70px verticalmente a partir do canto superior esquerdo da imagem).

Aqui está o que eu tenho (movi a seleção para a direita para mais clareza):

Todosessescálculossãoumpoucotediosos,massevocêtemmargensestáticas(parecequesuasimagenssãoproduzidasautomaticamente),entãovocêpodecalculá-lasumavezeaplicá-lasatodasassuasimagens.Ouatémesmofazeralgumscriptparaautomatizarisso(queéumaversãomelhoradadoscript-elecalculaaiteraçãousandoocomandoidentifydoImageMagick):

#!/bin/bashif[$#-lt2];thenecho"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"

Salve este script com o nome reviewimage em algum lugar. Em seguida, execute os comandos abaixo:

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

Agora você pode chamar este comando de todas as pastas com suas imagens. Por exemplo, para abrir uma pré-visualização da sua imagem raw10.png com o tamanho de 700x700 :

reviewimage 700 raw10.png

Se o nome tiver espaços, use aspas:

reviewimage 700 "raw 2.png"

Se a fórmula de cálculo de margem se tornar imprecisa com altas iterações, você poderá usar uma matriz de valores de margem. Ajuste cada valor de margem como achar melhor. O script abaixo mostra o princípio. Está preenchido com os valores das iterações 1-10, adicione mais dentro dos parênteses com o espaço como um divisor:

#!/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"

Esse script executa o recorte da imagem em vez de exibi-la, portanto, essa imagem convertida pode ser visualizada em qualquer programa. Precisa apenas de um parâmetro - nome da imagem:

convertimage "raw 9.png"
    
por whtyger 26.07.2016 / 10:05