#!/bin/bash # ce script a pour but de faire une image complette a partir d'une serie de photo prise avec le rotophoto # ch 20050922 # les operations a effectuer sont : # - recuperer les informations aupres de l'utilisateur # - copier les photos avec un nom permettant de les classer par ordre. # - couper une partie correspondant a une tache sur l'objectif # - redimentionner les photos pour faire diffenrentes taille d'images # - assembler les images # les differentes operations sont effectué les unes apres les autres plutot qu'en une seul commande afin de limiter l'utilisation du DD, et d'accelerer le calcul. # les fichiers temporaires sont stocké ds le repertoire des photos, et ne sont pas effacé windows_title="Rotophoto v0.3" # `zenity --info --title "$windows_title" --text "ce script vous permet de créer une image a partir d'une multitude de photos d'un repertoire."` if directory=`zenity --title "$windows_title" --file-selection --directory` then echo "directory = $directory" else exit 0; fi if offset=`zenity --list --radiolist --column " " --title "$windows_title" --column "nombre de colones a decaler" TRUE "0" false "custom"` then echo "offset = $offset" else exit 0; fi if [ $offset = custom ] then offset=`zenity --entry --title "$windows_title" --text "nombre de colones a decaler (ex : 1)"` echo "offset = $offset" fi if size=`zenity --list --radiolist --column " " --title "$windows_title" --column "taille des images de base" TRUE "200x150" false "800x600" FALSE "2000x1500" false "custom"` then echo "size = $size" else exit 0; fi if [ $size = custom ] then size=`zenity --entry --title "$windows_title" --text "taille des images de base de la mosaique (ex : 400x300)"` echo "size = $size" fi if crop=`zenity --list --radiolist --column " " --title "$windows_title" --column "recoupage des images sur les borts" true "0" false "100" false "200" false "350" false "500" false "custom"` then echo "crop = $crop" else exit 0; fi if [ $crop = custom ] then crop=`zenity --entry --title "$windows_title" --text "nombre de pixels a couper en X (ex : 100)"` echo "crop = $crop" fi if nbX=`zenity --list --radiolist --column " " --title "$windows_title" --column "nb d'images en X" false "8" false "10" false "12" false "14" true "16" false "custom"` then echo "nb d'image en X = $nbX" else exit 0; fi if [ $nbX = custom ] then nbX=`zenity --entry --title "$windows_title" --text "nombre d'images en X (ex : 10)"` echo "nb d'image en X = $nbX" fi if nbY=`zenity --list --radiolist --column " " --title "$windows_title" --column "nb d''image en Y" false "4" false "5" false "6" false "7" false "8" true "10" false "custom"` then echo "nb d'image en Y = $nbY" else exit 0; fi if [ $nbY = custom ] then nbY=`zenity --entry --title "$windows_title" --text "nombre d'images en X (ex : 6)"` echo "nb d'image en Y = $nbY" fi if recopie=`zenity --list --radiolist --column " " --title "$windows_title" --column "copie de la colone de gauche a droite" false "3" false "2" TRUE "1" false "0"` then echo "recopie = $recopie" else exit 0; fi if resolution=`zenity --list --radiolist --column " " --title "$windows_title" --column "nb de pixel de l'image original en X" true "3072" false "2592" false "2028" false "custom"` then echo "resolution = $resolution" else exit 0; fi if [ $resolution = custom ] then resolution=`zenity --entry --title "$windows_title" --text "nb de pixel de l'image original en X (ex : 3072)"` echo "resolution = $resolution" fi echo $directory $size $crop $nbX $nbY $offset $recopie $resolution # renomage des images # ------------------- echo renomages de $nbX*$nbY images a partir de $directory rm -rf $directory/tmp-roto-reorder mkdir $directory/tmp-roto-reorder i=0 nbi=$(( $nbX * $nbY )) ( for allpicture in $directory/* do x=$(( $i / $nbY )) y=$(( $i % $nbY )) (( x += $offset )) (( x = $x % nbX )) (( i += 1 )) z=$(( $x + 100 * $y )) (( z += 10000 )) cp $allpicture $directory/tmp-roto-reorder/roto_$z.jpg pourcent=$(( $i * 100 / $nbi )) echo $pourcent done ) | zenity --progress --title "$windows_title" --text "mise des images dans l'ordre" --auto-close --percentage 0 # copie de la derniere collone if [[ $recopie > 0 ]] then for ((i=0; i < $nbY ; i++)) do z1=$(( 10000 + 100 * $i )) z2=$(( 10000 + $nbX + 100 * $i )) cp $directory/tmp-roto-reorder/roto_$z1.jpg $directory/tmp-roto-reorder/roto_$z2.jpg done fi if [[ $recopie > 1 ]] then for ((i=0; i < $nbY ; i++)) do z1=$(( 10001 + 100 * $i )) z2=$(( 10001 + $nbX + 100 * $i )) cp $directory/tmp-roto-reorder/roto_$z1.jpg $directory/tmp-roto-reorder/roto_$z2.jpg done fi if [[ $recopie > 2 ]] then for ((i=0; i < $nbY ; i++)) do z1=$(( 10002 + 100 * $i )) z2=$(( 10002 + $nbX + 100 * $i )) cp $directory/tmp-roto-reorder/roto_$z1.jpg $directory/tmp-roto-reorder/roto_$z2.jpg done fi (( nbi += $nbY * $recopie )) # decoupage des images # -------------------- echo recadrage des images rm -rf $directory/tmp-roto-crop mkdir $directory/tmp-roto-crop crop_offsetX=$crop crop_offsetY=$(($crop * 3/4)) crop_sizeX=$(($resolution - 2 * $crop )) crop_sizeY=$(($crop_sizeX * 3/4)) cd $directory/tmp-roto-reorder/ i=0 ( for allpicture in * do if [[ $crop != 0 ]] then convert -crop "$crop_sizeX"x"$crop_sizeY"+"$crop_offsetX"+"$crop_offsetY" $allpicture ../tmp-roto-crop/$allpicture else cp $allpicture ../tmp-roto-crop/$allpicture fi (( i += 1 )) pourcent=$(( $i * 100 / $nbi )) echo $pourcent done ) | zenity --progress --title "$windows_title" --text "recadrage des images" --auto-close --percentage 0 cd .. # rm tmp-roto-crop/*-1.jpg # rm tmp-roto-crop/*-2.jpg # rm tmp-roto-crop/*-3.jpg # redimentionnement des images # ---------------------------- echo redimentionnement des images rm -rf $directory/tmp-roto-resize mkdir $directory/tmp-roto-resize cd $directory/tmp-roto-crop/ i=0 ( for allpicture in * do convert -resize "$size" $allpicture ../tmp-roto-resize/$allpicture (( i += 1 )) pourcent=$(( $i * 100 / $nbi )) echo $pourcent done ) | zenity --progress --title "$windows_title" --text "changement de taille des images" --auto-close --percentage 0 cd .. # assemblage des images # --------------------- echo assemblage des images cd tmp-roto-resize nbX=$(( $nbX + $recopie )) montage -tile "$nbX"x"$nbY" -geometry "$size"+0+0 "*.jpg" "../../roto-"$size"c"$crop_offsetX"c"$crop_offsetY"o"$offset"r"$recopie".jpg" cd .. rm -rf tmp-* echo "done!"