우분투 터미널에서 .png 그림의 특정 부분을 어떻게 열 수 있습니까?


1

상황 : 너비 1 : 960에서 그림 탐색을 시작하고 터미널
동기 부여 에서 전체 높이 : Ubuntu의 기본 이미지 뷰어는 그림을 전체 너비 및 전체 높이로 열어 매우 넓은 그림을 탐색하기 어렵게합니다. 너비 x 높이가 많은 사진을 반복 할 때는 전체 사진 의 CTRL+ -가 충분하지 않습니다. 차등 조건 : Gimp / ImageMagick /…을 사용하여 평면에서 밝기 대비를 조정하려면? , ... 각 반복에서 너비 x 높이 및 여백으로 픽셀 단위의 이미지 해상도

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
  • 2 번째 반복에서 이미지 해상도 960x1920, 5 번째 반복에서 960x4800, 9 번째 반복에서 960x8640 및 10 번째 반복에서 해상도 960x9600의 더미 테스트 데이터

    여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

내 의사 코드

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

불안과 여백 시도 displayextract

whtyger의 코드는 작동하지만 약간의 마진이 있습니다. 예를 들어 이미지에 따라 크기가 다릅니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

  • 오른쪽 그림에서 컬러 바의 모든 텍스트가 출력에 포함되는 것은 아닙니다.
  • 왼쪽 그림에서 margin_left는 margin_top과 같지 않습니다.

이유 : MARGIN_T, MARGIN_B, MARGIN_L, MARGIN_R
수정 : 큰 반복 또는 증가 과학적 번호를 사용 MARGIN_R; 코드의 일부 조정

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

출력 : 항상 데이터 주변의 여백

와 여백의 시도에 대한 whtyger의 의견을 검토 convert하고crop

여백을 완전히 없애려면 원본 이미지를 수정할 수 있습니다. convert image.png -crop SIZE_XxSIZE_Y + SHIFT_X + SHIFT_Y> edited.png를 사용하고 원하는 뷰어를 사용하십시오. 내 스크립트를 적용하여 display + extract를 convert + -crop으로 바꿉니다.

마지막 줄을 다음과 같지만 실패한 출력으로 바꿉니다.

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"

출력 : 모든 방향에서 약 1px 여백, 왼쪽 여백은 1000보다 큰 숫자에서 일부 정보를 잘라냅니다.

시스템 : Linux Ubuntu 16.04 64 비트
하드웨어 : Macbook Air 2013-mid


Cntrl+ -를 사용 하여 전체 사진을 볼 수 있습니까 ?
grooveplex

@grooveplex 아니오. 임의의 크기의 숫자로 인해 너무 시간이 많이 걸립니다. 더 나은 통제가 필요합니다.
Léo Léopold Hertz 준영

크기 조정이 작동합니까?
Pichi Wuana

@PichiWuana 예,하지만 내가 찾고있는 것이 아닙니다. 터미널 제어 또는 GV와 같은 GUI가 필요합니다.
Léo Léopold Hertz 준영

답변:


3

ImageMagick이라는 강력한 이미지 제품군이 있습니다. 도구 중에서 display이름에서 알 수 있듯이 콘솔에서 다양한 그래픽 형식을 표시하는 데 사용되는 유틸리티를 찾을 수 있습니다 . 사용법에 대한 몇 가지 예는 다음과 같습니다.

display -geometry 500x500 image.png

선택한 크기의 창에서 이미지가 열립니다. 또한 전체 이미지를 나타내는 작은 창이 근처에 열리므로 선택 사각형을 이동하여 이미지의 원하는 부분을 표시 할 수 있습니다.

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

이 명령은 이미지의 크기가 300x300 픽셀이고 왼쪽 상단 모서리에서 오프셋이 50 픽셀 인 이미지 부분을 표시합니다.

옵션의 전체 목록은에서 찾을 수 있습니다 man display. 또한 광범위한 매뉴얼이 있습니다 .

ImageMagick은 다른 유용한 도구도 제공합니다. 예를 들어 이미지에 대한 정보 (유형, 크기, 크기)가 표시됩니다.

identify "my image.png"

여백없이 이미지를 표시하려면 나중에 자르기 위해 이미지를 측정해야합니다. 물건을 더 빨리 만들기 위해 김프에서 더미 사진을 열었습니다. 따라서 여백은 다음과 같습니다.

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

당신이 그림의 원래 크기 인 경우 8640x960: 다음 여백없이 이미지 크기가 될 것입니다 X=8640-1070-880=6690Y=960-70-100=7906690x790.
이제 출력을 생성하기 위해 옵션 -geometry-extract옵션을 결합 합니다.

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

(출력 창의 크기를 500x500으로 설정하고 이미지를 새로운 크기 6690x790으로 자르고 자르기 영역을 이미지의 왼쪽 상단에서 가로로 1070px, 세로로 70px 씩 이동하십시오).

여기 내가 가진 것이 있습니다 (더 명확하게하기 위해 선택을 오른쪽으로 옮겼습니다).

파편

이러한 모든 계산은 약간 지루하지만 정적 여백이있는 경우 (이미지가 자동으로 생성되는 것처럼 보입니다) 한 번 계산하여 모든 이미지에 적용 할 수 있습니다. 또는 이것을 자동화하기 위해 스크립트를 작성하십시오 (스크립트의 개선 된 버전 identify입니다-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"

이 스크립트를 reviewimage어딘가에 이름으로 저장하십시오 . 그런 다음 아래 명령을 실행하십시오.

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

이제 이미지가있는 모든 폴더에서이 명령을 호출 할 수 있습니다. 예를 들어, 이미지의 미리보기를 엽니 다 raw10.png의 크기를 700x700:

reviewimage 700 raw10.png

이름에 공백이 있으면 따옴표를 사용하십시오.

reviewimage 700 "raw 2.png"

반복 횟수가 높으면 여백 계산 공식이 정확하지 않은 경우 여백 값 배열을 사용할 수 있습니다. 원하는대로 각 여백 값을 조정하십시오. 아래 스크립트는 원리를 보여줍니다. 반복 1-10의 값으로 채워지고 구분 기호로 공백이있는 괄호 안에 더 많이 추가하십시오.

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

이 스크립트는 이미지를 표시하는 대신 이미지 자르기를 수행하므로이 변환 된 이미지는 모든 프로그램에서 볼 수 있습니다. 이미지 이름은 하나만 필요합니다.

convertimage "raw 9.png"

1
@Masi display -geometry는 오프셋을 출력 창의 수평 및 수직 이동으로 취급합니다. 시도 했습니까 display -extract? 오프셋은 이미지에서 추출 된 부분의 상대적 위치로 취급합니다.
whtyger

1
@Masi 김프로 이미지를 열기 만하면됩니다. 눈금자를 켭니다 (Ctrl + Shift + R). 커서를 이미지 테두리로 이동하면 눈금자에 마커가 표시되어 여백의 픽셀 너비를 결정하는 데 도움이됩니다. 10 번째 반복 더미와 관련하여 상단 및 하단 여백은 변경되지 않았으며 왼쪽은 1190, 오른쪽은 980입니다. 나머지 반복은 사용자에게 달려 있습니다. 쉽게 계산할 수있는 산술 진행처럼 보입니다.
whtyger

1
@Masi 미리보기를 자동화하는 스크립트를 추가했습니다. 나는 그것이 마침내 충분하기를 바랍니다.
whtyger

1
@Masi 내 시스템은 12.04LTS입니다. 그러나이 경우에는 중요하지 않습니다. 내 스크립트를 사용해 보셨습니까?
whtyger

1
@Masi 이해가 잘 모르겠습니다. 함수를 사용하는 ImageMagick이 아니며 Bash 스크립트가 요청한 영역 만 표시합니다. -extract임의의 치수로 옵션을 적용 하면 표시됩니다. 콘솔에서 시험 해보고 언급 한 맨 페이지를 확인하십시오. 그리고 마지막 조언. 여백을 완전히 없애려면 원본 이미지를 수정할 수 있습니다. 사용 convert image.png -crop SIZE_XxSIZE_Y+SHIFT_X+SHIFT_Y > edited.png하고 원하는 뷰어를 사용하십시오. display+ -extractconvert+를 대치하여 내 스크립트를 조정할 수 있습니다 -crop.
whtyger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.