Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ECRIRE UN TEXTE EN CERCLE SUR UNE IMAGE


Information sur la source

Catégorie :Graphique Classé sous : ecrire, image, gd, rond, cercle Niveau : Débutant Date de création : 14/08/2008 Vu : 4 886

Note :
9,71 / 10 - par 7 personnes
9,71 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (36)
Ajouter un commentaire et/ou une note


Description

Cliquez pour voir la capture en taille normale
suite a une demande sur le forum, je vous poste cette fonction
http://www.phpcs.com/infomsg_ECRIRE-ROND_1187165.aspx#3

elle permet d'ecrire un texte en cercle sur une image.
 

Source

  • <?php
  • function sq($x){ return $x * $x; }
  • function convrad (){ return pi() / 180; }
  • function convdeg (){ return 180 / pi(); }
  • /**
  • * @param $im l'image
  • * @param $color la couleur
  • * @param $font la police
  • * @param $size la taille
  • * @param $r le rayon du cercle
  • * @param $phrase la phrase a afficher
  • * @param $cx le centre du cercle (abscisse)
  • * @param $cy le centre du cercle (ordonnee)
  • * @param $phy le decalage
  • */
  • function circleWrite($im, $color, $font, $size, $r, $phrase, $cx, $cy, $phy = 180){
  • // combien de degres entre deux lettres ?
  • $tab = imagettfbbox($size , 0 , $font , 'X' );
  • $lenX = $tab[4] - $tab[0];
  • $lenY = $tab[5] - $tab[1];
  • $len = sqrt(sq($lenX) + sq($lenY));
  • $step = atan($len / $r) * convdeg();
  • $nbrLettres = strlen($phrase);
  • for ($i=0;$i<$nbrLettres;$i++){
  • $angle = $phy + $i * $step;
  • $angleRAD = $angle * convrad();
  • $x = $cx + cos($angleRAD)*$r;
  • $y = $cy + sin($angleRAD)*$r;
  • imagettftext($im, $size, 270 - $angle , $x, $y, $color, $font, $phrase[$i]);
  • }
  • }
  • $dx = 200;
  • $dy = 200;
  • $im = imagecreate($dx,$dy);
  • $white = imagecolorallocate($im, 255,255,255);
  • $black = imagecolorallocate($im, 0,0,0);
  • $font = '/usr/share/fonts/truetype/freefont/FreeMono.ttf';
  • circleWrite($im, $black, $font, 15, min($dx / 3, $dy / 3), 'salut c\'est moi', $dx / 2, $dy / 2);
  • header("Content-type: image/png");
  • imagepng($im);
  • imagedestroy($im);
  • ?>
<?php

function sq($x){ return $x * $x; }
function convrad (){ return pi() / 180; }
function convdeg (){ return 180 / pi(); }
/**
* @param $im l'image
* @param $color la couleur
* @param $font la police
* @param $size la taille
* @param $r le rayon du cercle
* @param $phrase la phrase a afficher
* @param $cx le centre du cercle (abscisse)
* @param $cy le centre du cercle (ordonnee)
* @param $phy le decalage
*/
function circleWrite($im, $color, $font, $size, $r, $phrase, $cx, $cy, $phy = 180){
  // combien de degres entre deux lettres ?
  $tab = imagettfbbox($size , 0 , $font  , 'X' );
  $lenX = $tab[4] - $tab[0];
  $lenY = $tab[5] - $tab[1];
  $len = sqrt(sq($lenX) + sq($lenY));
  $step = atan($len / $r) * convdeg();
  $nbrLettres = strlen($phrase);
  for ($i=0;$i<$nbrLettres;$i++){
    $angle = $phy + $i * $step;
    $angleRAD = $angle * convrad();
    $x = $cx + cos($angleRAD)*$r;
    $y = $cy + sin($angleRAD)*$r;
    imagettftext($im, $size, 270 - $angle , $x, $y, $color, $font, $phrase[$i]);
  }
}


$dx = 200;
$dy = 200;
$im = imagecreate($dx,$dy);
$white = imagecolorallocate($im, 255,255,255);
$black = imagecolorallocate($im, 0,0,0);
$font = '/usr/share/fonts/truetype/freefont/FreeMono.ttf';

circleWrite($im, $black, $font, 15, min($dx / 3, $dy / 3), 'salut c\'est moi', $dx / 2, $dy / 2);

header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>

Commentaires et avis

signaler à un administrateur
Commentaire de nicomilville le 14/08/2008 14:20:27

Salut,

Fontcion utile...

ça change de certine sources...

a++

signaler à un administrateur
Commentaire de coucou747 le 14/08/2008 14:25:01

merci

signaler à un administrateur
Commentaire de nicomilville le 14/08/2008 14:31:37

De rien,

Quand je vois de bonne source je le dit mais quand j'en vois des mauvaise je le dit aussi...

Par contre, pourquoi ne pas le faire en javascript ?

Je crois que tu connais le javascript vu le nombre post que tu as sur javascriptfr...

Donc je pense que ce ne serai pas une mauvaise idée de convertir la source en javascript(pas très difficile) et de la poster dans effet ou truc et astuce...

Encore une fois merci pour cette source, elle nous montre la vois a prendre pour plusieurs aures choses...

a++

signaler à un administrateur
Commentaire de durealex le 14/08/2008 14:33:56

Cool comme fonction merci :)
Apres c'est comme au scrabble faut juste savoir ou la placée :D

signaler à un administrateur
Commentaire de coucou747 le 14/08/2008 14:35:31

avec 11 lignes de commentaires et cet exemple, tu devrais pouvoir te debrouiller :)

signaler à un administrateur
Commentaire de nicomilville le 14/08/2008 14:39:06

Petites correction, excusez moi, mon clavier marche très mal...

Il fallait lire :

Fonction utile, ça change de certaines sources...

a++

signaler à un administrateur
Commentaire de tempusus le 14/08/2008 17:13:08 administrateur CS 10/10

ça c'est pas mal comme source, utile et bien documentée.

signaler à un administrateur
Commentaire de malalam le 15/08/2008 10:38:15 administrateur CS 10/10

Hello,

joli : c'est simple, bien codé et utile. Je vais l'inclure dans un de mes packages d'ailleurs, si ça ne te dérange pas :-)

signaler à un administrateur
Commentaire de coucou747 le 15/08/2008 15:04:20

ca ne me derange pas du tout :)

signaler à un administrateur
Commentaire de djmmix le 16/08/2008 11:30:27

salut super fonction :),personalisable rien a redire du bon boulot

signaler à un administrateur
Commentaire de djmmix le 16/08/2008 11:31:45 10/10

ha un autre commentaire pour une bonne note de 10/10 :)

signaler à un administrateur
Commentaire de kiki2sirom le 18/08/2008 13:54:23

bien le bonjour,
ok pour le côté simple, bien codé...
mais par contre en essayant d'écrire quelque chose comme "ça", je me retrouve avec du "ç"
et en remplaçant mon texte par un utf8_decode('montexte'), ça fonctionne...

Est-ce moi qui ait loupé un train ?
merci pour l'info

kiki

signaler à un administrateur
Commentaire de Eregon le 18/08/2008 16:08:42 8/10

Salut, bel exemple d'utilisation GD ;)

Quelques petits commentaires:
$phy le decalage: -90(ou 270) : départ d'en haut, +-180 de la gauche, 0 de la droite et 90 d'en bas.

Il y a déjà des fonctions de conversion d'angle : deg2rad et rad2deg
et pour le carré, c'est plus simple d'écrire directement $x*$x

Sinon, joli l'atan pour trouver l'angle, mais tu prends en compte la diagonale(d'un X en plus), or juste la largeur importe, vu que la hauteur est orientée dans la direction du rayon.
Donc moi je dirais plutôt:
$len = $lenX * 1.5 , Ce qui revient presque au même.
Le 1.5 pour recréer l'espacement entre les lettres, et qui pourrait être configurable ;)
Le problème reste que les lettres n'ont pas toutes la même largeur, mais ça ajouterait évidemment qqs lignes de code...(Sans cet espace entre les lettres, on voit bien plus l'erreur des largeusr variables des lettres)
Mais visiblement, c'est beaucoup plus simple et beau en gardant la même largeur :)

signaler à un administrateur
Commentaire de coucou747 le 18/08/2008 16:42:54

je prefere largement ecrire sq($x) que $x*$x, c'est moins verbeu.

sinon, ta remarque pour la longueur est exellente, j'en tiendrais compte pour une mise a jours.

signaler à un administrateur
Commentaire de cosmoswarezone1 le 21/08/2008 01:22:23 10/10

super cette fonction !!!

signaler à un administrateur
Commentaire de gigawatt le 04/09/2008 14:56:04

Bonjour

Dommage qu'il n'y est pas de commentaires en face des lignes principales, pour les novices comme moi ce serait un atout supplémentaire pour comprendre le programme.
Merci d'avance si ceci peut être résolu.
Merci
A+
Gigawatt

signaler à un administrateur
Commentaire de coucou747 le 04/09/2008 15:05:14

je ne vois pas ce que tu ne comprends pas... c'est assez expressif comme fonction...

signaler à un administrateur
Commentaire de marcelolipi le 08/11/2008 14:03:15

bonjour  coucou747

en fait jai un probleme avec cette souce.
le truc cest le fait que jutilise windows comme S E.
jaimerais savoir comment faire pour avoir FreeMono.ttf sur windows ou encore est il possible dexecuter ce code sans avoir a utiliser un font ? si oui comment le modifier ?

signaler à un administrateur
Commentaire de coucou747 le 08/11/2008 14:26:25

salut

je ne sais pas ou sont stoquees les polices sous windows. tu peux rechercher les fichiers *.ttf sur ton disque dur, tu finiras bien par trouver.

signaler à un administrateur
Commentaire de nicomilville le 08/11/2008 14:33:59

Salut,

Si je peus me permettre, sur windows, les polices sont stocké sur C:\Windows\Fonts

En espèrant avoir aider

a++

signaler à un administrateur
Commentaire de marcelolipi le 08/11/2008 15:12:47

Merci ca ma aidé et jai utilisé arial.ttf
jai donc executé la fonction .par la suite jaimerais savoir s'il vous plait comment faire pour genere une image       grace au php.Et s'il est possible de generer un autre format si oui les kels ?

signaler à un administrateur
Commentaire de coucou747 le 08/11/2008 15:17:51

moi j'ai mis ca :

# header("Content-type: image/png");
# imagepng($im);

mais tu peux mettre :

# header("Content-type: image/jpeg");
# imagejpeg($im);

cherche sur php.net, tu verras les formats supportes

signaler à un administrateur
Commentaire de marcelolipi le 08/11/2008 16:37:43

---> coucou 747

le probleme vient du fait que php.net donne des definitions a la volée je crois qu'elle est incomplete.
au fait imagepng() ou imagejpeg() sont inexistantes.
es-ce ke je peu avoir une documentation plus detaille ? pour pouvoir par exemple gerer de la video ou de l'audio ?



                                         Merci d'avance

ps:coucou747 jai lu certaines de tes sources et je dois avouer que je n'ai jamais vu quelqu'un auusi fort en algoithme que toi. Coup de chapeau. comment fait-on pour etre aussi doué ?

signaler à un administrateur
Commentaire de coucou747 le 08/11/2008 17:02:26

merci

je pratique beaucoup. mais je peux t'assurer que j'ai rien d'exceptionnel en algo... j'en ai vu a prologin me battre largement :)

si imagepng n'existe pas, alors c'est que tu n'as pas installe php-gd (la librairie gd pour php)

si tu veux gerer de l'audio ou de la video en php, c'est pas GD qu'il faudra utiliser. peut-etre ffmpeg fonctionnera t'il, j'en sais rien, je ne l'ai jamais utilise.

bon courage.

signaler à un administrateur
Commentaire de marcelolipi le 08/11/2008 17:19:04

prologin ? qu'es-ce ?

Merci pour l'info su l'existance des librairies php .Je vais donc essayer de me documenter dessus .
Mais en attendant ffmpeg  fonctionne .Je lai installé en local  la semaine derniere mais je ne lai pas encore utilisé. Je sais aussi que pour lutiliser il faut avoir la main mise sur le serveur.

Sans vouloir etre un peu trop collant j'aimerais savoir tes autres langages de programmation.Du moins moi je suis un DUT en genie informatique et les langages academike avaient ete pascal et java. Donc cest a titre personnel que j'éssaye de developper en php.
jaimerais avoir un parain aussi experimenté que toi es-ce possible ? surtout pour heriter  

signaler à un administrateur
Commentaire de coucou747 le 08/11/2008 17:31:22

je programmais en Qbasic il y a 10 ans.

aujourd'hui, je fais :
du php
du mysql
du java
du C
du ocaml
du lisp (mzscheme)
du javascript

a l'ocas, je touche aussi a quelques autres langages comme le C++, le tcl, le povray, le bash, j'ai fait deux trois trucs en perl, python, etc...

signaler à un administrateur
Commentaire de marcelolipi le 08/11/2008 17:52:41

Cool
sur yahoo  messenger je suis marcelghislain2000@yahoo.fr .
pour un dialogue en privé

signaler à un administrateur
Commentaire de coucou747 le 08/11/2008 18:00:10

non merci

signaler à un administrateur
Commentaire de nicomilville le 08/11/2008 18:49:19

Au fait, maintenant que tu as mis ton adresse en dur ici, tu as toute les chances d'être harcelé par tout les robot spammeur d'internet.

Voila, a++

signaler à un administrateur
Commentaire de marcelolipi le 08/11/2008 18:59:11

Merci

pour linfo je crois aussi que je me suis exposé aussi au hacking je vais essayer de me proteger

signaler à un administrateur
Commentaire de nicomilville le 08/11/2008 19:02:31 10/10

Non, seuleument au SPAM.

Pour en revenir à la source, je l'avais déjà commenté mais je ne l'avais pas noté.

Donc voici le 10 que j'aurai dûe mettre il y a bien longtemps !

a++

signaler à un administrateur
Commentaire de marcelolipi le 08/11/2008 19:10:20 10/10

moi aussi je ne lavais pas encore noté
et je crois qu'elle merite vraimment un 10 elle est top



a++

signaler à un administrateur
Commentaire de coucou747 le 08/11/2008 23:39:59

merci

signaler à un administrateur
Commentaire de alaindu_33 le 29/12/2008 09:19:01

Bonjour dommage ne marche pas avec fronpage

signaler à un administrateur
Commentaire de coucou747 le 29/12/2008 11:58:06

en meme temps, ici on fait de la programmation php, pas des pages html

signaler à un administrateur
Commentaire de alaindu_33 le 29/12/2008 12:31:58

dommage et merci

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

générer des miniatures avec gd 1.6 [ par vegetaline ] muhaha alors là c'est rigolo, un super défi pour les programmeurs fous!ok j'ai le code pour générer des miniatures grâce au php, mais ça marche qu'ave texte sur image... librairie GD ? [ par ozitoun ] Bonjour bonjour,voili voilou, je cherche à mettre une texte sur une image (jpeg).j'ai essayé les imagestring, imagechar... mais à chaque fois les exem Couper le bas d'une image (GD PHP) [ par dezeque ] bonjour,j'aimerai savoir comment faire pour couper le bas d'une image ?elle fais 600X800 et j'aimerai enlver les 50 dernirers pixels du bas pour quell Problème d'affichage avec la libraire GD [ par CMOIPOPO ] Salut &#224; tous,Je souhaite dessiner tout b&#234;tement un rectangle en php (je travaille en local)&nbsp;&#224; l'aide de la libraire GD. Pour cela, Librairie GD, Besoin d'aide !!! [ par Astalavista ] &nbsp;&nbsp;&nbsp; Bon, je post ca, car je n'arrive pas a trouver ... :( Je cherche un moyen de fair un Stretch sur une image, C'est a dir de deformer [BLOB->GD] Redimensionner un "flux image binaire"... [ par arnal69130 ] Bonjour &#224; tous,Je cherche &#224; faire une page pour afficher la carte d'identit&#233; d'un "agent", pour simplifier disons juste son nom et sa p Variable --> image [ par recco ] Bonjour. J'ai cr&#233;&#233; un formulaire en POST qui renvoie les donn&#233;es dans une base. L'utilisateur a le choix entre 2 r&#233;ponses via deux Librairie GD [ par Stephan45120 ] J'orai besoin de superposer 2 images. La première en arrière plan et l'autre en calque par dessus(transparente à certain endroit). Ce que je veux arri fonction avec image [ par chris tuckers ] Bonjour tout le monde &nbsp;et bonne ann&#233;e bonne sant&#233; !!!Ca faisait longtemps que je n'avais pas poster (et oui je m'am&#233;liore) mais la lycos et library GD [ par bobbycoul ] bonjour,j'ai un compte gratuit sur lycos (multimania), et la library GD (la version 2 est installé sur leur serveurs) foire jexplique:qd je créé une i


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,515 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.