Как открыть специфическую часть рисунка.png в терминале Ubuntu?
Ситуация: начать просмотр фигур с шириной 1:960 и высотой в Терминале
Мотивация: средство просмотра изображений Ubuntu по умолчанию открывает фигуру на всю ширину и на всю высоту, что затрудняет просмотр очень широких фигур; его CTRL
+ -
полной картинки недостаточно, когда вы перебираете много картинок, где ширина х высота
Дифференциальные условия: настроить яркость-контраст в плоскости с помощью Gimp / ImageMagick /…?,... Разрешение изображения как ширина х высота и поля в пикселях на каждой итерации
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://Ask-ubuntu.ru/a/803012/25388
Фиктивные тестовые данные разрешения изображения 960x1920 на 2-й итерации, 960x4800 на 5-й итерации, 960x8640 на 9-й итерации и разрешения 960x9600 на 10-й итерации соответственно
Мой псевдокод
#!/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"
Попытка нестабильного поля с display
а также extract
код whtyger работает, но имеет некоторые нестабильные поля, т.е. их размер различается в зависимости от изображения, здесь 5-я итерация
- На рисунке справа вы видите, что не весь текст цветовой шкалы включен в вывод.
- На левой картинке вы видите, что 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 ))
Вывод: некоторый запас вокруг данных всегда
Проверка комментария Утигера на попытку отсутствия полей с 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"
Вывод: поле размером около 1 пикселя во всех направлениях, левое поле обрезает информацию из чисел>= 1000.
Система: Linux Ubuntu 16.04 64 бит
Аппаратное обеспечение: Macbook Air 2013-mid
1 ответ
Есть мощный набор изображений под названием ImageMagick. Среди его инструментов вы можете найти display
Утилита, которая используется, как видно из ее названия, для отображения различных графических форматов с консоли. Вот несколько примеров его использования:
display -geometry 500x500 image.png
Это откроет ваше изображение в окне с выбранным размером. Кроме того, небольшое окно, представляющее полное изображение, будет открыто рядом, так что вы можете переместить прямоугольник выбора, чтобы показать нужные части вашего изображения.
display -extract 300x300+50+50 image.png
Эта команда покажет вам часть вашего изображения размером 300x300 пикселей со смещением 50 пикселей от ее верхнего левого угла.
Вы можете найти полный список его вариантов в man display
, Также есть обширное руководство здесь.
ImageMagick также предоставляет другие полезные инструменты. Например, здесь будет отображаться информация об изображении (его тип, размеры, размер):
identify "my image.png"
Чтобы отобразить ваше изображение без полей, мы должны измерить их, чтобы обрезать их позже. Я открыл твою пустышку в Gimp, чтобы все было быстрее. Итак, поля:
Left - 1070px
Right - 880px
Top - 70px
Bottom - 100px
Если исходный размер вашего изображения 8640x960
тогда размер изображения без полей будет: X=8640-1070-880=6690
а также Y=960-70-100=790
т.е. 6690x790
,
А теперь мы совместим -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"