view games/cards/split_card.sh @ 89:92b844829ae2

fonts: fontawesome integration: Include parts of fontawesome free "for the web" 6.6.0, which will be used for icons in frontends to replace fontello. Fontello is not maintained anymore (last commit 2 years ago), and has licensing issues (some icons were advertise as free while they were not). It will be removed from this repository, and fontawesome is used instead. Only the parts actually used in Libervia frontends are included, to save space.
author Goffi <goffi@goffi.org>
date Sat, 26 Oct 2024 21:42:44 +0200
parents b51e7418840e
children
line wrap: on
line source

#!/bin/sh
#This script split an image with cards, used to split cards from the Tarot deck found on Wikimedia Commons
#This script work with any resolution on the initial image
#Copyright (C) 2009, 2010  Jérôme Poisson (goffi@goffi.org)

#This program is free software: you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation, either version 3 of the License, or
#(at your option) any later version.

#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.

#You should have received a copy of the GNU General Public License
#along with this program.  If not, see <http://www.gnu.org/licenses/>.

dest_dir=cards

get_face_name()
{
	if [ $1 -le 10 ]
	then
		echo $1
	else
		case $1 in
		11) echo valet;;
		12) echo cavalier;;
		13) echo dame;;
		14) echo roi;;
		esac
	fi
}

get_card_name()
{
	if [ $1 -le 21 ]
	then
		echo "atout_$1"
	elif [ $1 -eq 22 ]; then
		echo "atout_excuse"
	elif [ $1 -le 36 ]; then
		echo "pique_$(get_face_name $(($1-22)))"
	elif [ $1 -le 50 ]; then
		echo "coeur_$(get_face_name $(($1-36)))"
	elif [ $1 -le 64 ]; then
		echo "carreau_$(get_face_name $(($1-50)))"
	else
		echo "trefle_$(get_face_name $(($1-64)))"
	fi
}

#We check the version of convert
CONVERT_VER=`convert --version | grep Version | grep -o "[0-9]\.[0-9]\.[0-9]"`
CONVERT_MAJOR=`echo $CONVERT_VER | cut -d . -f 1`
CONVERT_MINOR=`echo $CONVERT_VER | cut -d . -f 2`
CONVERT_REV=`echo $CONVERT_VER | cut -d . -f 3`

if [ $CONVERT_MAJOR -lt 6 -o $CONVERT_MAJOR -eq 6 -a $CONVERT_MINOR -lt 6 ]
then
	echo "ImageMagick convert must be at least version 6.6.0 (current: $CONVERT_VER)"
	exit 1
fi

SYNTAXE="Split card image\nsyntaxe: $0 image_to_split.ext"

if [ $# -ne 1 ]
then
	echo  $SYNTAXE
	exit 1
fi

echo `file -b --mime-type $1` | grep image 2>&1 > /dev/null

if [ $? -ne 0 ]
then
	echo "target file is not an image"
	exit 1
fi

current=`pwd`
#TODO: check directory presence
#echo "making directory"
if test -e $dest_dir
then
	if test -n "`ls -A $dest_dir`"
	then
		echo "$dest_dir directory exists and is not empty !"
		exit 1
	fi
else
	mkdir $dest_dir
fi
echo "splitting cards"
convert Tarotcards.jpg -bordercolor black -crop 14x6@ -fuzz 50% -trim $dest_dir/card_%02d.png 2>/dev/null
cd $dest_dir

#POST PROCESSING

nb_files=`ls -A1 card*png | wc -l`
num=0
idx=0
max_w=0
max_h=0
deleted=""
for file in card*png
do
	num=$((num+1))
	size=`stat -c%s $file`
	width=`identify -format "%w" $file`
	height=`identify -format "%h" $file`

	if [ $width -gt $max_w ]
	then
		max_w=$width
	fi

	if [ $height -gt $max_h ]
	then
		max_h=$height
	fi

	echo -n "post processing file [$file] ($num/$nb_files) | "
	echo -n `echo "scale=2;$num/$nb_files*100" | bc`%
	echo -n "\r"

	if test $size -lt 1000
		then #we delete empty files (areas without card on the initial picture)
			deleted="$deleted$file\n"
			rm -f $file
		else
			idx=$((idx+1))
			#We use transparency for the round corners
			mogrify -fuzz 80% -fill none -draw "matte  0,0 floodfill" \
										 -draw "matte  $((width-1)),0 floodfill"\
										 -draw "matte  0,$((height-1)) floodfill"\
										 -draw "matte  $((width-1)),$((height-1)) floodfill"\
										 $file
			#Time to rename the cards
			mv "$file" "$(get_card_name $idx).png"

		fi
done
echo "\nEmpty files deleted:\n$deleted"
echo "\nBiggest size: ${max_w}X${max_h}"
cd "$current"
echo "DONE :)"