Skip to content

Instantly share code, notes, and snippets.

@fangelion
Created September 6, 2020 18:00
Show Gist options
  • Save fangelion/a5dbfe7346a2cb71e4221049511fef4f to your computer and use it in GitHub Desktop.
Save fangelion/a5dbfe7346a2cb71e4221049511fef4f to your computer and use it in GitHub Desktop.
#!/bin/bash
#скрипт для нарезки картинки на куски с разделителем "белая линия"
fname="$1"
tmp="tmp/"
delimeter="white"
check(){
echo $1
echo "$2"
for i in $2
do
if [[ $i -eq $1 ]];then
echo true
fi
echo false
done
}
#получаем размеры исходной картинки
width=$(identify "$1" | cut -d " " -f3|cut -d "x" -f1)
height=$(identify "$1" | cut -d " " -f3|cut -d "x" -f2)
#echo $width"x"$height $(expr $height - 1 )
#вытягиваем первую и последнюю строку изображения и находим белые разделители
cc1=$(convert "$fname" -crop "$width"x1+0+0 -monochrome txt:- |grep $delimeter |sed -n /[^,]*0/p|sed 's/\([^,]*\),.*/\1/')
h=$(expr $height - 1 )
cc2=$(convert "$fname" -crop "$width"x1+0+$h -monochrome txt:- |grep $delimeter |sed -n /[^,]*0/p|sed 's/\([^,]*\),.*/\1/')
#присваиваем массивам точки разделителей
#echo "cc1=" ${cc1[@]} "cc2=" ${cc2[@]}
c=$cc2
i=0
for n in $c ;do
cc2[$i]=$n
i=$(expr $i + 1)
done
c=$cc1
i=0
for n in $c ;do
cc1[$i]=$n
i=$(expr $i + 1)
done
if [ -z ${cc1[0]} ];then
echo "В этом файле нет разделителей"
exit 1
fi
#echo "cc1=" ${#cc1[@]} "cc2=" ${#cc2[@]}
#отбрасываем кривые разделители, оставляем только ровные и сводим в единый массив
if [[ ${#cc1[@]} -lt ${#cc2[@]} ]];then
count=${#cc1[@])}
else
count=${#cc2[@])}
fi
for ((i=0;i<=count;i++))
do
#echo "check" ${cc2[@]}
e=`check ${cc1[$i]} "${cc2[@]}"`
echo $e
if [[ $e ]];then
c[$i]=${cc1[$i]}
fi
echo $i
done
#находим начала разделителей
count=${#c[@]}
#echo $count
n=1
cc[0]=0 #это наша первая граница
for ((i=1;i<=count;i++))
do
#echo ${c[$i]}
t=${c[$(expr $i - 1 )]}
#echo $t
#echo $(expr ${c[$i]} - $t)
if [[ $(expr ${c[$i]} - ${c[$(expr $i - 1)]}) -ne 1 ]];then
cc[$n]=${c[$(expr $i - 1)]}
n=$(expr $n +1)
cc[$n]=${c[$i]}
fi
done
cc[$(expr $n +1)]=$width #это наша последняя граница - ширина картинки
#если нет прямых разделителей, то говорим об этом
if [ -z ${cc[0]} ];then
echo "В этом файле нет прямых разделителей"
exit 1
fi
first=$(echo $cc |cut -d " " -f1)
for i in $cc; do second=$i;done
#тут мы отделяем название от рысширения
if [[ ! -z $(expr match "$1" '.*/\(.*\)\.') ]];then
name=$(expr match "$1" '.*/\(.*\)\.')
ras=$(expr match "$1" '.*\.\(.*\)')
else
name=$(expr match "$1" '\(.*\)\.')
ras=$(expr match "$1" '.*\.\(.*\)')
fi
if [[ ! -e tmp ]]; then
mkdir tmp
else
if [[ ! -d tmp ]]; then
mkdir tmp1
tmp="tmp1/"
fi
fi
#собсно производим саму нарезку
count=${#cc[@]}
for ((i=1;i<=count;i++))
do
w=$(expr ${cc[$i]} - ${cc[$(expr $i - 1)]})
d=${cc[$(expr $i - 1)]}
convert $fname -crop "$w"x0+"$d"+0 -trim +repage "$tmp"$name"_"$i"."$ras
done
#w=$first
#d=0
#echo "$tmp"$name"_1."$ras
#convert $fname -crop "$w"x0+"$d"+0 -trim +repage "$tmp"$name"_1."$ras
#w=$(expr $second - $first)
#d=$first
#convert $fname -crop "$w"x0+"$d"+0 -trim +repage "$tmp"$name"_2."$ras
#w=$(expr $width - $second)
#d=$second
#convert $fname -crop "$w"x0+"$d"+0 -trim +repage "$tmp"$name"_3."$ras
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment