diff games/cards/split_card.sh @ 4:b51e7418840e

file reorganisation
author Goffi <goffi@goffi.org>
date Sat, 18 Jun 2011 16:39:37 +0200
parents frontends/src/wix/images/split_card.sh@8b41eb519075
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/games/cards/split_card.sh	Sat Jun 18 16:39:37 2011 +0200
@@ -0,0 +1,148 @@
+#!/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 :)"