Programmer en C la librairie gd : le texte

J’ai décidé de faire un petit article qui explique rapidement comment écrire du texte « non crénelé », donc « antialiasé » du des images, en C, en utilisant la librairie gd.

Tout est très simple : vous trouverez déjà le manuel ici, pas mis à jour mais suffisant et les exemples fonctionnent, ce qui est le plus important.

Ce qui m’a posé le plus de problème, ce n’est pas de demander à écrire du texte. L’exemple ici fonctionne parfaitement, faites un copier coller, hop on y est.
Non, le problème c’est la « région » calculée dans laquelle sera dessiné le texte.
Pour résumer, on demande de pré-calculer la « boîte » dans laquelle sera dessiné le texte (toujours l’exemple ici).
Ce que j’ai mis beaucoup de temps à comprendre, c’est ce que je vais traduire dans « mon » langage : la boîte englobante qui est renvoyée, c’est l’espace qui sera utilisé en fonction du point de référence (x,y) que vous donnez pour dessiner.

Je m’explique. Vous demandez à calculer la boite pour dessiner le texte en passant la variable NULL :

err = gdImageStringFT(NULL,&brect[0],0,f,sz,0.,0,0,s);
if (err) {fprintf(stderr,err); return 1;}

Maintenant, dans brect il y aura ce genre d’informations :


     (   -1,  -57)     ( 1513,  -57)
           +-----------------+
           |                 |
           |                 |
           +-----------------+
     (   -1,   15)     ( 1513,   15)

Et en fait, c’est uniquement des informations pour vous, parce qu’après, lorsque vous lui demanderez de dessiner, il les ignorera : seules les informations x et y seront utilisées :

err = gdImageStringFT(im,&brect[0],black,f,sz,0.0,x,y,s);
if (err) {fprintf(stderr,err); return 1;}

Autrement dit, prenons un exemple : vous voulez dessiner votre texte en x=0. Seulement, le rectangle de retour est celui que j’ai affiché en haut : ça signifie que le dessin va « déborder » de (-1) pixel sur x. Autrement dit, si vous voulez le mettre en 0, il faut donner les coordonnées (x=1). Même chose pour y : les lettres vont « s’étaler » 57 pixels au dessus, et 15 pixels en dessous. Donc si vous voulez écrire le texte en (0,0), il vous faudra passer x=1, y=57.

En relisant ça parait facile, mais ça ne l’a pas été pour moi !
En espérant que cela serve à quelqu’un un jour…

Piano : une composition de l'une des oeuvres de de J. Pachelbel (1653–1706)

L’auteur de cette composition est J. Pachelbel (1653–1706). J’ai pu trouver sa biographie en Français. Si vous cliquez dessus vous verrez le résultat en Français.
Voici une de ses œuvres (je l’ai retenue car elle était destinée au piano bien sûr) :

Fugues on the Magnificat III. 7.

Elle est faite pour piano.
C’est une composition baroque.
Sa licence est de type « Creative Commons Attribution-ShareAlike« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, il ne faut pas se fier à la qualité vous pourrez faire mieux).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici
NB : j’ai récupéré ces compositions, qui sont entièrement libres de droit, sur ce site qui est tout simplement géniallissime : mutopiaproject

Linux et Applications Windows : ça marche !

Je suis tout simplement impressionné.
En quelques clicks d’installation, j’ai installé « Wine ».
Tout a fonctionné du premier coup.
J’ai copié collé le répertoire dans lequel tournait notre application de téléphonie :
Et voilà le résultat :
Image petite du logiciel Windows sous Linux
Ça fonctionné du premier coup !
Je suis vraiment impressionné.
Donc, pour l’instant, tant que je n’ai pas besoin de fonctionnalités particulières, je reste sous Linux.
Je dois avouer que le seul programme qui me manque c’est Photoshop.
Pour tout le reste, je m’en passe allègrement !

Quand je clique sur arrêter pour arrêter le PC, c’est simple :

  • sous Windows, il met montre en main plus d’une minute, et encore… je ne suis même pas sûr qu’il s’arrête pour la simple et bonne raison qu’il y a des tonnes de programmes : un anti virus, un anti spam, le logiciel de téléphonie qui ne veut quitter sous aucun prétexte, le logiciel d’archivage, etc. et des fois ils se gênent tous entre eux ;
  • sous Linux, ça met 4 secondes montre en main, c’est véridique !

Piano : une composition de l'une des oeuvres de de A. E. Müller (1767–1817)

L’auteur de cette composition est A. E. Müller (1767–1817). J’ai pu trouver sa biographie en Français. Si vous cliquez dessus vous verrez le résultat en Français.
Voici une de ses œuvres (je l’ai retenue car elle était destinée au piano bien sûr) :

Siciliano

Elle est faite pour piano.
Elle a été composée au 18è siècle
Son genre est du type classique.
Sa licence est de type « Domaine publique« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité est limite).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici
NB : j’ai récupéré ces compositions, qui sont entièrement libres de droit, sur ce site qui est tout simplement géniallissime : mutopiaproject

Uzbl : un browser Web entièrement en ligne de commande !

C’est ici que vous pourrez voir cet « ovni » du monde Internet : http://www.uzbl.org/.

Il est en plusieurs parties : le coeur même du système, et un programme qui interagit avec lui, lui envoie des messages, et affiche son résultat de retour. Comme le coeur semble extrêmement bien fait, on est censé pouvoir faire tout un tas de choses, automatiquement : un cas concret, c’est l’exemple du second programme qui interagit avec le coeur : en pratique on a un navigateur. Et puis il a rajouté une troisième couche, un troisième programme qui interagit avec le second, et qui donne la possibilité de tout gérer par onglets. Comme tout est open source, et apparemment très bien écrit, il est possible de faire plein de choses.

Le second programme, il a décidé de faire en sorte que son comportement soit du style « vi », à savoir : tout se fait au clavier, il y a un mode « navigation » où les touches se comportement d’une certaine façon, et il y a le mode édition (touche « i » comme sur vi, pour les connaisseurs), où on peut entrer des informations dans les formulaires.

Dans la vidéo, sur le site, on voit qu’il va déjà bien plus vite en tapant sur son clavier qu’en utilisant la souris. Je pense que lorsqu’on va toujours sur des sites qu’on connait bien, on doit au final gagner beaucoup de temps.

Piano : quelques compositions des oeuvres de L. A. Minkus (1826–1917)

L’auteur de toutes ces compositions est L. A. Minkus (1826–1917). J’ai pu trouver sa biographie en Français. Si vous cliquez dessus vous verrez le résultat en Français.
Voici quelques-unes de ses œuvres (je les ai retenues car elles étaient destinées au piano bien sûr) :

La Bayadère – Acte II

Elle est faite pour piano.
Son genre est du type classique.
Sa licence est de type « Domaine publique« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité est limite).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

La Bayadère – Allegretto delicato

Elle est faite pour piano and flute.
Son genre est du type classique.
Sa licence est de type « Domaine publique« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité est mauvaise).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

La Bayadère – Variation de Nikya

Elle est faite pour piano`, flute and horn.
Son genre est du type classique.
Sa licence est de type « Domaine publique« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité n’est pas bonne).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

La Bayadère – Variation des Ombres

Elle est faite pour piano`, flute and percussion.
Son genre est du type classique.
Sa licence est de type « Domaine publique« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, il ne faut pas se fier à la qualité vous pourrez faire mieux).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici
NB : j’ai récupéré ces compositions, qui sont entièrement libres de droit, sur ce site qui est tout simplement géniallissime : mutopiaproject

Chatroulette et piano : enfin une utilisation super de chatroulette !

Si vous avez la chance de parler / comprendre un tout petit peu l’Anglais, et que vous connaissez chatroulette, alors cliquez immédiatement sur le lien ci dessous sans poser de question :
http://www.youtube.com/user/PianoChatImprov

Au total, plus de 6 millions de personnes ont déjà vu  !

C’est la mode et pour une fois, et ce n’est pas déplaisant

D’autres tentent de faire la même chose mais c’est nettement moins sympa…

http://www.youtube.com/watch?v=KzxYslV0wiw

Ou encore :

http://www.youtube.com/watch?v=8qBFNaA7u1E

Surtout laissez d’autres adresses dans vos commentaires si vous avez des liens excellents concernant charoulette !

Piano : quelques compositions des oeuvres de F. Liszt (1811–1886)

L’auteur de toutes ces compositions est F. Liszt (1811–1886). J’ai pu trouver sa biographie en Français. Si vous cliquez dessus vous verrez le résultat en Français.
Voici quelques-unes de ses œuvres (je les ai retenues car elles étaient destinées au piano bien sûr) :

Consolation, S.172 No.1

Elle est faite pour piano.
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution 3.0« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité est limite).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Consolation, S.172 No.3

Elle est faite pour piano.
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution 3.0« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité est mauvaise).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Consolation, S.172 No.4

Elle est faite pour piano.
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution 3.0« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité n’est pas bonne).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Second Ballade

Elle est faite pour piano.
Elle a été composée en 1853
C’est une composition romantique.
Sa licence est de type « Domaine publique« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, il ne faut pas se fier à la qualité vous pourrez faire mieux).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici
NB : j’ai récupéré ces compositions, qui sont entièrement libres de droit, sur ce site qui est tout simplement géniallissime : mutopiaproject

Linux : exemple php pratique pour grep, awk, sort, uniq et xargs

Ci-suivent quelques étapes qui expliquent l’utilisation des outils grep, awk, sort et uniq. C’est juste un exemple concret et pratique, n’imaginez pas un truc immense ! J’espère que cela vous donnera des idées, si un jour vous avez besoin de faire quelque chose dans le genre.

Objectif : lister tous les fichiers php du répertoire courant, qui font appel à l’ordre « date() ».

Donc :

  • Ordre « find » de Linux qui liste tous les fichiers d’un répertoire et de ses sous-répertoires :
    >find .
    ./robots.txt
    ./tarification2.php
    ./partenaire_demande.php
    ./img
    ./img/menu-gb_02-Carte-image_02_o.gif
    ./img/fleche_blc_fond_bleu.gif
    ./img/old_get_adobe_reader.gif
    ./img/menu-gb_02-Carte-image_05_o.gif
    ./img/ste_gestion_over.gif
    ./img/cbp_attest_ass_over.gif
    ./img/index_06.jpg
    [etc. etc.]
  • Ordre « grep » de Linux qui ne prend que les fichiers « qui se terminent par php » :
    >find . | grep php$
    ./img/index.php
    ./aore/verlogin.php
    ./aore/tarication2.php
    ./aore/img/iex.php
    ./aore/corats.php
    ./aore/ind.php
    ./aore/ccts.php
    [etc. etc.]
  • Ordre « xargs » de Linux qui dit « je vais te donner un programme (ici « grep »), et tu lui fais suivre ligne par ligne les résultats. Pour la note, « grep 'date(' [nom_de_fichier] » vérifie si dans le fichier [nom_de_fichier], il y a ‘date(‘ :
    >find . | grep php$ | xargs grep 'date('
    ./pe.php: $date=date("Y-m-d H:i:s");
    ./partde.php: $date_french=date("d-m-Y H:i:s");
    ./as/vergin.php:$date=date("Y-m-d H:i:s");
    ./as/cs.php:$date=date("Y-m-d H:i:s");
    ./as/cs.php:$date=date("Y-m-d H:i:s");
    ./as/cs.php: $date=date("d-m-Y H:i:s");
    ./as/sis.php:$date=date("Y-m-d H:i:s");
    ./ae/sis.php:$date=date("Y-m-d H:i:s");
    ./ae/stre_cle.php:$date_heure = date("Y-m-d H:i:s");
    ./ae/stre_cle.php:$date = date("Y-m-d");
    [etc. etc.]
  • Ordre « awk » qui prend la ligne en cours, considère que les « : » sont les séparateurs (-F:), et n’affiche en sortie que le premier enregistrement ('{print $1}') pour chaque ligne :
    >find . | grep php$ | xargs grep 'date(' | awk -F: '{print $1}'
    ./re/vein.php
    ./re/ctrs.php
    ./re/ctrs.php
    ./re/ctts.php
    ./re/sises.php
    ./re/sires.php
    ./re/sire_cle.php
    ./re/sire_cle.php
    ./re/sire_cle.php
    ./re/sire_cle.php
    ./ae/mu.php
    ./ae/mu.php
    [etc. etc.]
  • Ordre « uniq » qui prend la totalité de ce qu’on lui passe, et supprime les doublons :
    >find . | grep php$ | xargs grep 'date(' | awk -F: '{print $1}' | uniq
    ./re/vein.php
    ./re/ctrs.php
    ./re/ctts.php
    ./re/sises.php
    ./re/sires.php
    ./re/sire_cle.php
    ./ae/mu.php
    [etc. etc.]
  • Ordre « sort » qui trie par ordre alphabétique :
    >find . | grep php$ | xargs grep 'date(' | awk -F: '{print $1}' | uniq | sort
    ./ae/mu.php
    ./re/ctrs.php
    ./re/ctts.php
    ./re/sises.php
    ./re/sires.php
    ./re/sire_cle.php
    ./re/vein.php
    [etc. etc.]

Et voilà ! Une minute pour taper cette commande, et on a la liste de tous les fichiers à vérifier pour être certain qu’il n’y aura plus de warnings() lors de l’utilisation de date() dans ces fichiers php.
Pour la note, j’ai eu besoin de faire ça parce que ces fichiers devaient avoir en tête l’initialisation préalable date_default_timezone_set(). Ces fichiers sont les fichiers d’un très vieux site qu’il faut faire fonctionner en mettant au minimum les mains dedans, c’est ce que j’ai tenté de faire (pour préserver aussi ma santé mentale).

(Update 6 février 2011)
Sur ce site ici qui me cite, il y a une réponse très intéressante : lorsqu’on connait bien l’ordre « find« , on peut résumer tout mon article en une seule ligne et un seul ordre :

find -iname "*.php" -exec grep "\Wdate(" "{}" \; -print

Bon, le résultat ne renvoie pas que les fichiers, mais il est bien formaté, c’est aussi très pratique. Voici un exemple de sortie de cet ordre :

  $debloc_jj = (int) date('d');
  $debloc_mm = (int) date('m');
  $debloc_aa = (int) date('Y');
  echo '<li>Lancement des calculs à '.date("H:i:s").'.</li>';
  echo '<li>Terminé à '.date("H:i:s").'.</li>';
./_tests_unitaires/tarifs_generali/tarifs_2010.php
  $debloc_jj = (int) date('d');
  $debloc_mm = (int) date('m');
  $debloc_aa = (int) date('Y');
./_tests_unitaires/verifs.php
  $debloc_jj = (int) date('d');
  $debloc_mm = (int) date('m');
  $debloc_aa = (int) date('Y');
./_tests_unitaires/verifs_multi.php

Piano : quelques compositions des oeuvres de R. Kumar (1988–)

L’auteur de toutes ces compositions est R. Kumar (1988–). Je n’ai rien pu trouver sur cet auteur. Si vous cliquez dessus vous verrez le résultat d’une recherche sur google… et surtout si vous avez plus d’informations à son sujet, n’hésitez pas à laisser un commentaire, je l’intègrerai dans cet article.
Voici quelques-unes de ses œuvres (je les ai retenues car elles étaient destinées au piano bien sûr) :

Prelude

Elle est faite pour piano.
Elle a été composée en 2005
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution-ShareAlike 3.0« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, il ne faut pas se fier à la qualité vous pourrez faire mieux).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Flat

Elle est faite pour piano.
Elle a été composée en 2007
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution-ShareAlike 3.0« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité sonore cache la qualité réelle vous pourrez faire bien mieux).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Jumelle qui joue

Elle est faite pour piano.
Elle a été composée en 2004
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution-ShareAlike 2.5« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité est très moyenne).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Lace

Elle est faite pour piano.
Elle a été composée en 2003
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution-ShareAlike 3.0« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité est limite).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Lani

Elle est faite pour piano.
Elle a été composée en 2005
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution-ShareAlike 3.0« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité est mauvaise).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Unfixed

Elle est faite pour piano.
Elle a été composée en 2006
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution-ShareAlike 3.0« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité n’est pas bonne).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Valse

Elle est faite pour piano.
Elle a été composée en 2002
Son genre est du type classique.
Sa licence est de type « Creative Commons Attribution-ShareAlike 2.5« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, il ne faut pas se fier à la qualité vous pourrez faire mieux).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici

Vase

Elle est faite pour piano.
Elle a été composée en 2006
C’est une composition romantique.
Sa licence est de type « Creative Commons Attribution-ShareAlike 3.0« .
Si vous voulez l’écouter cliquez sur : fichier midi (.mid) (attention, la qualité sonore cache la qualité réelle vous pourrez faire bien mieux).
Le plus intéressant : cliquez ici pour voir la partition
Vous pouvez éventuellement lire une jolie description de cette composition ici
Enfin, tous les fichiers de cette composition sont regroupés ici
NB : j’ai récupéré ces compositions, qui sont entièrement libres de droit, sur ce site qui est tout simplement géniallissime : mutopiaproject