Article publié dans Linux Magazine 81, mars 2006.
Pour la conférence YAPC::Europe 2005, les organisateurs avaient
décidé de fournir un maximum d'information et de matériel aux
participants, quitte à ce qu'il en ait trop. ;-)
Ainsi, ils ont mis à disposition sur le site de la conférence[1] une première carte sous la forme d'une image au format PNG[2], qui est un plan de Braga avec des points numérotés pour repérer les différents lieux relatifs à la conférence. Une autre personne décida alors de fournir l'équivalent Google Maps, ce qui rendit la précédente carte moins utile. Néanmoins je décidais d'essayer de l'imprimer pour en avoir une version papier sous la main une fois à Braga.
Après avoir récupéré cette image (qui pèse tout de même 5,1 Mo) je me suis demandé comment l'imprimer, car un premier essai me confirma qu'une impression directe en A4 était peu utile, le texte étant illisible. La solution était donc de fractionner l'image en plusieurs parties afin d'imprimer chacune sur une feuille A4. N'ayant pas envie de découper l'image « à la main », je commençais à chercher un mécanisme pour s'en charger pour moi.
Un rapide coup d'œil dans The Gimp ne m'indiqua rien de
flagrant pour réaliser cette opération. Je me tournait ensuite
vers les commandes en ligne de l'autre couteau suisse en matière
d'images, ImageMagick. convert(1)
ne permet « que » de
convertir une image en un autre format (avec la possibilité
d'appliquer légion d'effets spéciaux). mogrify(1)
permet de
transformer des images, par exemple pour les redimensionner et
montage(1)
d'assembler plusieurs images en une seule, mais
rien pour fractionner une image. Restait conjure(1)
, qui
exécute un script MSL (Magick Scripting Language), un machin
un peu infâme en XML. Commençant à désespérer, je me mets à
chercher sur Freshmeat puis le CPAN, où je suis tombé sur le
module Image::Magick::Tiler
[3] de Ron Savage.
Celui-ci rend cette opération d'une simplicité déconcertante. Jugez plutôt, pour fractionner le plan de Braga en 6 « carreaux », le petit script suivant suffit :
#!/usr/bin/perl use strict; use Image::Magick::Tiler Image::Magick::Tiler->new( input_file => shift || die("usage: $0 image [geometry [format]]"), geometry => shift || '2x2', output_type => shift || 'png', write => 1, verbose => 1, )->tile()
et il s'exécute ainsi :
$ tiler braga.png 3x2
Image::Magick::Tiler
crée alors les fichiers correspondants :
$ ls -l total 10384 -rw-r--r-- 1 maddingue users 600908 nov 6 17:59 1-1.png -rw-r--r-- 1 maddingue users 930240 nov 6 17:59 1-2.png -rw-r--r-- 1 maddingue users 960254 nov 6 17:59 1-3.png -rw-r--r-- 1 maddingue users 852730 nov 6 17:59 2-1.png -rw-r--r-- 1 maddingue users 1171000 nov 6 17:59 2-2.png -rw-r--r-- 1 maddingue users 750563 nov 6 17:59 2-3.png -rw-r--r-- 1 maddingue users 5316276 jan 14 2005 braga.png
Détaillons un peu le fonctionnement de ce script (même s'il est plutôt simple).
On crée un objet (Image::Magick::Tiler->new(...)
) et on
exécute la méthode tile()
qui effectue le travail proprement
dit en fonction des paramètres passés à new()
.
input_file
attend évidemment le nom du fichier à traiter.
Ici, on utilise un court-circuit (l'opérateur ||
) pour soit
récupérer le premier argument du script, soit terminer le script
en affichant son usage.
geometry
indique comment découper l'image de départ.
L'argument est de la forme NxM+x+y
, où N
est le nombre
par défaut de carreaux en horizontal, et M
le nombre par
défaut de carreaux en vertical. Si l'image de départ a une
largeur L
et une hauteur H
, les carreaux ont donc par
défaut une largeur de L / N
et une hauteur de H / M
.
+x
et +y
permettent ensuite d'ajuster respectivement la
largeur et la hauteur des carreaux, auquel cas
Image::Magick::Tiler
sera potentiellement amené à augmenter
ou diminuer le nombre de carreaux à créer.
output_type
permet d'indiquer le format de sortie, par
défaut PNG.
write
indique à la méthode tile()
d'écrire les images
sur disque au lieu de simplement créer les objets Image::Magick
correspondants.
verbose
indique évidemment au module d'être verbeux.
À noter qu'il existe aussi un paramètre output_dir
pour
indiquer le répertoire où créer les images (par défaut dans
le répertoire courant).
(Sébastien Aperghis-Tramoni (Maddingue), Marseille.pm - sebastien@aperghis.net
)
[1] http://braga.yapceurope.org/
Le podcast (en français baladodiffusion) consiste à mettre à disposition sur le web des enregistrements sonores (ou vidéo) qu'ils vont aller télécharger pour les écouter à leur guise sur leur baladeur. Wikipédia donne une définition plus complète du podcasting sur http://fr.wikipedia.org/wiki/Podcasting.
La mode est donc aux podcasts, et la communauté Perl n'est pas en reste. Joshua MacAdams a monté début 2005 une émission hebdomadaire (nommée Perlcast) qui diffuse, sous forme de mp3 de longueur variable, des informations sur la communauté Perl (nouveaux modules, conférences, etc.).
Josh réalise également des interviews de contributeurs connus ou moins connus de la communauté Perl. Ces interviews sont probablement la partie la plus intéressante du site. Parmi les 18 interviews déjà disponibles, on trouve des célébrités (comme Damian Conway, Larry Wall ou Randal Schwartz), des auteurs de livres (Ian Langworth, chromatic, Peter Scott), des contributeurs bien connus (Andy Lester, Casey West), et bien d'autres personnes qui ont beaucoup de choses intéressantes à dire.
L'émission est en anglais (en américain, en fait). C'est un bon moyen de se
ré-habituer l'oreille avant d'aller à une conférence ! ;-)
Le site Perlcast : http://perlcast.com/.
(Philippe "BooK" Bruhat, Lyon.pm & Paris.pm - book@mongueurs.net
)
Envoyez vos perles à perles@mongueurs.net
, elles seront peut-être
publiées dans un prochain numéro de Linux Magazine.
Copyright © Les Mongueurs de Perl, 2001-2011
pour le site.
Les auteurs conservent le copyright de leurs articles.