Archives par mot-clé : Inkscape

Réaliser des cartes de jeu

Voilà quelques jours, ma tendre moitié m’a confié une mission délicate : pour l’enterrement de vie de jeune-fille d’une amie, réaliser des cartes à faire deviner. Si le thème devait fatalement tourner autour de l’Amour, il était question de décliner ces cartes en plusieurs jeux :

  • Couples célèbres, étendus aux duos célèbres, à faire deviner sur le principe du jeu Time’s Up!
  • Personnages et personnalités ayant été de grands amoureux, étendus aux gros cochons, à faire deviner sur le principe du jeu Devine-Tête.
  • Mots se rapportant aux chansons d’amour, pour faire trouver des paroles de chansons sur le principe du jeu Shabadabada.
Carte personnalisée
Carte personnalisée

Lorsqu’on se lance dans la réalisation d’un jeu de cartes, on va rencontrer principalement trois difficultés. Il est donc important de bien penser à tout dès le départ :

  1. Quelle taille devront faire mes cartes, et quel look elles auront ? C’est bien si elles sont rigolotes, mais c’est encore mieux si on peut lire ce qui sera écrit dessus !
  2. Trouver des idées… Trouver des trucs… des choses… des machins… quelque chose, quoi ! Là, il faut se creuser la cervelle pour écrire des sujets sur ces cartes. Hé puis combien de cartes, d’ailleurs ? Car jouer à 3 ou à 12 personnes ne requerra pas nécessairement le même nombre de cartes ; donc mieux vaut en prévoir suffisamment, de quoi tenir trois semaines dans un bunker, on ne sait jamais.
  3. Les textes entrent-ils tous sur les cartes, ou bien certains seront-ils coupés ? Comment les imprimer ? Sur quoi les imprimer ? Le format des pages (communément du A4) et la qualité du papier impacteront directement le rendu final, mais également l’impression. Attention aux marges, notamment ! Pour les plus consciencieux (et les plus riches), un tirage sur papier photo aura un excellent rendu, mais dans ce cas mieux vaut mettre de côté le format A4. Ce ne sera pas mon cas.

Bien. Les bases sont là. Maintenant, s’il faut réaliser cent cartes et éditer les textes un à un, ça peut être long. Un petit coup de publipostage faciliterait quand-même les choses… Malheureusement pour vous, l’affreux geek que je fais se doit de trouver des solutions en adéquation avec son univers où les optimisations sont poussées jusqu’à leur paroxysme (du moins quand ça marche). Par conséquent, bam ! Bash et ImageMagick. :mrgreen:

Voici une archive contenant un certain nombre de fichiers, qui devraient permettre à quiconque ayant un peu de volonté (bon, d’accord, beaucoup de volonté !) de produire un jeu de cartes :

  • Une image de carte vierge, celle-là même de l’exemple ci-dessus. Mais vierge.
  • Un fichier SVG pré-réglé pour remplacer la carte vierge par défaut. Oui, parce qu’on n’est pas obligé de reprendre mon exemple horrible…
  • Un fichier TTF correspondant à la police de caractères que j’ai utilisé dans mon exemple.
  • Deux fichiers TXT proposant chacun une liste de mots prêts à l’emploi.
  • Le script Bash à exécuter, celui-ci faisant notamment appel aux commandes identify, convert et montage de la suite ImageMagick. Il appelle automatiquement les fichiers JPG et TTF joints dans l’archive, et prend en argument le nom d’un fichier texte (accessoirement l’un des deux fournis, mais ce sera encore mieux avec les vôtres)

Après exécution du script, un fichier appelé « cartes_a_jouer.pdf » est créé. Il s’agit d’un fichier PDF encapsulant toutes les images des cartes produites, à raison de dix cartes par page. Voici un court exemple de cartes qui ont été réalisées avec ce script.

Il ne reste plus qu’à imprimer ce fichier. Les cartes faisant approximativement 9 x 5 cm, il est possible d’imprimer deux pages sur une, soit 20 cartes par page, de façon à ce qu’elles soient plus petites (et de façon à économiser du papier aussi) tout en restant encore lisibles. Pour apporter un peu de rigidité et pour les rendre réutilisables/durables, vous pouvez les plastifier, cela de deux façons :

  • si vous avez accès à une plastifieuse, le résultat sera au rendez-vous
  • vous pouvez éventuellement vous tourner vers les rouleaux adhésifs transparents (ceux-là mêmes pour plastifier les livres de vos rejetons), mais leur manipulation sera un peu plus délicate… Une vraie plaie, en fait !

Il ne manque plus qu’à découper chaque carte. Là encore, plusieurs options sont possibles :

  • les bons vieux ciseaux, ce qui reste la solution la plus simple mais pas la plus efficace
  • le massicot, encore faut-il en avoir un à portée de main
  • le scalpel et la règle en aluminium, à utiliser de préférence sur un support ne craignant pas d’être abîmé. C’est une solution peu chère et qui permet d’obtenir de bons résultats rapidement ; mais gare à bien maintenir la feuille !

Mosaïque d’images pour le Web

Dans le magazine GNU/Linux Pratique n°67 de septembre-octobre 2011, un article intitulé « Sprites CSS : découpe d’images en CSS » et écrit par Tristan Colombo, permet de découvrir le principe de la mosaïque d’images pour le déploiement des divers éléments graphiques d’une page Web. Le principe et les avantages évoqués (les performances réseau notamment) sont très intéressants.

Cette mosaïque d’images consiste en une juxtaposition de l’ensemble des « icônes » ou « sprites » qui seront utilisés pour habiller le site, au sein d’une seule et unique image. Depuis que le navigateur Internet Explorer supporte les images PNG (ça ne fait pas si longtemps :???:), c’est d’autant intéressant que l’on peut profiter de la transparence (le fameux canal alpha), chose impossible avec les formats JPG et GIF.

Beaucoup de « webdesigners » (je n’aime pas ce terme…) créent leurs images sources en vectoriel, par exemple en SVG. De cette façon, en plus de modifier très aisément les divers composants d’un dessin, il est très simple de le convertir en PNG, tout en adaptant ses dimensions en fonction des besoins :

  • si 14px de haut c’est trop petit, hop! on teste avec 16px
  • utilisation commune d’une version 30×200 et d’une version 90×600
  • etc…

Lorsqu’on est amené à produire, et des fichiers SVG « sources », et des images PNG, cela revient à gérer deux fichiers par image, là où le SVG seul compte réellement. En outre, en déployant l’ensemble de ses images PNG sur divers sites Web, on n’est pas à l’abri d’une incohérence (une icône n’a plus les mêmes dimensions que les autres, pourquoi ?) ou d’un oubli.

Le principe de la mosaïque d’images a donc bien des avantages. Toutefois on se rend bien compte qu’il n’est pas évident de convertir un fichier SVG en PNG, de faire cela quinze fois, avant d’assembler toutes les images en une seule à la main dans Gimp… Puis devoir tout recommencer pour ajouter trois nouvelles images fraîchement créées, et ainsi de suite… Il va falloir un peu automatiser tout ça !

Le script Bash ci-dessous permet de se concentrer sur la réalisation des images vectorielles et leur déploiement. Il requiert essentiellement Inkscape pour la conversion des dessins vectoriels (grâce à son utilisation en ligne de commande), ainsi qu’ImageMagick pour la juxtaposition des images PNG. Une fois enregistré dans un fichier exécutable comme ~/bin/mosaique.sh, son utilisation est très simple :

  1. Depuis le terminal, on se place dans le répertoire contenant les fichiers SVG
  2. On passe en paramètre la hauteur souhaitée (en pixels) pour toutes les images
  3. En sortie on obtient une seule et unique image PNG.

#! /bin/bash

source ~/bin/common.sh

# Permet de convertir le chemin d'un fichier accessible pour Inkscape depuis ouin-ouin
function windows ()
{
	echo "$1" | sed "s/\\/.\\//\\//g" | tr '/' '\\'
}

Hpx=$1
p=`pwd`

if test "$Hpx" = ""
then
	printcolor $RED "Veuillez specifier la hauteur (en pixels) que devront avoir les icones" >&2
	echo "" >&2
	
	exit 1
fi

# Retrait de la precedente mosaique d'images
rm -f ./mosaique.png 2>> /dev/null

# Conversion des images vectorielles du repertoire courant, en images PNG
for f in `ls ./*svg`
do
	test "`uname -o`" = "Cygwin" && f2=`windows "c:/cygwin${p}/${f}"` || f2=$f
	
	h=`inkscape -f ${f2} -H 2>> /dev/null`
	w=`inkscape -f ${f2} -W 2>> /dev/null`
	Wpx=`echo "$Hpx * $w / $h" | bc`
	
	inkscape \
		-f ${f2} \
		-e ${f2%svg}png \
		-C \
		-w $Wpx \
		-h $Hpx 2>> /dev/null
done

# Calcul du nombre de lignes et de colonnes constituant la mosaique
n=`ls -1 ./*png | wc -l`
# Nb d'images par ligne
L=`echo "sqrt($n)" | bc`
# On s'arrange pour avoir un nombre impair
test $((L % 2)) -gt 0 && L=$((L + 1))
# Nb de lignes d'images
H=$((n / $L))
# En cas reste sur la division, on ajoute une ligne
test $((n % $L)) -gt 0 && H=$((H + 1))

printcolor $GREEN "$n images : la mosaique va etre organisee sur une grille de ${L} colonnes et ${H} lignes"
echo ""

# Assemblage des images PNG a l'aide d'ImageMagick
montage \
	./*.png \
	-mode Concatenate \
	-tile ${L}x${H} \
	-background none \
	./mosaique.PNG

# Retrait des fichiers PNG temporaires
rm -f ./*.png 2>> /dev/null

mv ./mosaique.PNG ./mosaique.png

Voici plusieurs exemples réalisés avec un jeu d’images SVG issu du thème hicolor de Gnome, disponible notamment dans l’arborescence d’Ubuntu.

Mosaïque d'images en 10x10
10x10
Mosaïque d'images en 25x25
25x25
Mosaïque d'images en 50x50
50x50
Mosaïque d'images en 99x99
99x99

L’automatisation de cette mosaïque s’avère finalement redoutable d’efficacité. Il est ainsi possible de multiplier les essais ou d’ajouter de nouvelles images sans trop d’effort. Toutefois, cette première ébauche d’automatisation ne répond pas encore à tous les besoins et souffre de quelques failles, tels que :

  • l’organisation des images est basé uniquement sur le nom des fichiers, il est peut-être judicieux de leur adjoindre un indice
  • la mosaïque produite comprend des images de même hauteur uniquement, or il serait intéressant de pouvoir mixer plusieurs tailles d’images

Pour les personnes étant sous Windows, Cygwin permet d’installer le paquet ImageMagick sans problème. Pour exécuter Inkscape comme s’il s’agissait d’un programme GNU/Linux, le plus pratique consiste à ajouter un lien symbolique dans son répertoire ~/bin/ de cette façon :

ln -s /cygdrive/c/Program Files/Inkscape/inkscape.exe ~/bin/inkscape
chmod +x ~/bin/inkscape

Cadres « néon » pour Fotowall

Voici quelques cadres à ajouter au logiciel de pèle-mêles Fotowall. Fait avec amour sous Gimp, Inkscape et avec l’aide d’ImageMagick ! 😀

Cadres néon pour Fotowall
Cadres néon pour Fotowall

Pour pouvoir utiliser ces cadres, veuillez décompresser cette archive ZIP, puis ouvrir les fichiers SVG directement depuis Fotowall (bouton clef à molette > Nouveau cadre).

Si les quelques couleurs réalisées ne vous suffisent pas, si vous souhaitez améliorer le look de ces cadres, ou bien si vous êtes tout simplement curieux / curieuse de savoir comment ils ont été créés, vous pouvez également télécharger ce fichier source. Celui-ci comprend trois fichiers :

  • neon.xcf, le fichier « projet » qui s’ouvre avec Gimp, comprenant calques et chemins.
  • neon_bleu.png, l’image produite par défaut à partir du projet neon.xcf.
  • fotowall_frame_compiler.sh, un script Bash permettant de créer (presque) automatiquement un cadre SVG à partir d’une image PNG.

Pour créer de nouvelles couleurs facilement, sans passer par le projet, il suffit d’ouvrir l’image PNG dans Gimp, et de jouer avec le menu Couleurs > Colorier (teinte et saturation donnant de très bons résultats).

Le script Bash s’utilise ainsi (sous nunux :mrgreen:) :

~$ ./fotowall_frame_compiler.sh neon_bleu.png
  • Avec l’aide d’ImageMagick et de la commande convert, le script divise d’abord en 9 l’image PNG et enregistre temporairement les 9 images résultantes.
  • Le fichier SVG est ensuite créé avec les chemins relatifs des 9 images PNG.
  • Le fichier SVG s’ouvre alors automatiquement dans Inkscape, afin de stocker les images directement dans le fichier (menu Extensions > Images > Incorporer les images) au lieu de faire appel aux fichiers PNG externes. Une fois modifié, le fichier SVG est prêt pour Fotowall.
  • Les 9 images temporaires sont supprimées avant que le script Bash ne se termine.

Un de ces quatre, il faudra aussi que je donne quelques explications plus « techniques » sur la réalisation de cadres pour Fotowall, ceci afin peut-être d’éviter quelques heures de rétro-ingénierie à d’autres…

Petit bonus : de nombreux cadres que j’ai réalisé il y a maintenant quelque temps… 😎

Creative Commons License
Publié sous licence Creative Commons.