AHL & Louïa

Venez vous présenter à la communauté des PNiens, que vous soyez un nouveau venu ou un vétéran! Toutes les informations nécessaires à la navigation sur le réseau sont ici.
Répondre
Quizzman
Admin
Admin
Messages : 15246
Inscription : jeu. 20 oct. 2005 - 19:19
Localisation : Maybe behind you...
Contact :

Message par Quizzman »

AHL 67 a écrit :Le seul "petit" problème, c'est que je n'ai pas trouvé le moyen faire lisser le texte par PHP quand il est trop petit. La solution que j'ai trouvée est donc de faire une grande image et de laisser le script du forum la redimensionner. C'est pas très élégant, ça déforme un peu la page le temps de charger l'image, mais ça marche.
Non.

Enlève cette signature dans les plus brefs délais, ou c'est moi qui te l'enlève. Ou restes-en au bon vieux texte.

EDIT: Je veux bien tenter de t'aider pour ton script. Commence par me virer l'image en attendant, et c/c le texte de ton code ici.

EDIT2: La fonction imagecreate(x,y) devrait te permettre de faire une image de taille réglementaire, non ?
Un topic à mettre au musée ? Faites en la demande en m'envoyant un MP, j'ai la mémoire courte. :D
Image Image Image Image Image Image Image Image Image Image Image
Avatar de l’utilisateur
AHL 67
Correcteur PN
Correcteur PN
Messages : 3727
Inscription : lun. 17 avr. 2006 - 01:09
Localisation : Sur l'onglet d'à côté ^_^

Message par AHL 67 »

J'ai remis la version réduite. De l'image quand même, mais réduite. Si elle change pas, c'est un problème de cache.

Le code, c'est ça :

Code : Tout sélectionner

<?php
	header('Content-Type: image/png');
	
	// Récupération du décalage en fonction du texte et de la police :
	function GetShift($font, $text)
		{
		$shift = imagettfbbox(100, 0, $font, $text);
		return $shift[2];
		}
	
	// Images :
	$fullW    = 5000;      $fullH    = 500;
	$resizedW = $fullW/10; $resizedH = $fullH/10;
	$imgFull    = imagecreatetruecolor($fullW, $fullH);
	$imgResized = imagecreatetruecolor($resizedW, $resizedH);
	
	// Couleurs :
	$white = imagecolorallocate($imgFull, 255, 255, 255);
	$black = imagecolorallocate($imgFull, 0, 0, 0);
	
	// Polices :
	$font   = getenv('windir').'/Fonts/Verdana.ttf';
	$fontB  = getenv('windir').'/Fonts/VerdanaB.ttf';
	$fontI  = getenv('windir').'/Fonts/VerdanaI.ttf';
	$fontBI = getenv('windir').'/Fonts/VerdanaZ.ttf';
	
	// Score :
	$score = [SECRET INDUSTRIEL, NON MAIS !!!];
	
	// Remplissage des images :
	imagefill($imgFull,    0, 0, $white);
	imagefill($imgResized, 0, 0, $white);
	imagecolortransparent($imgFull,    $white);
	imagecolortransparent($imgResized, $white);
	
	// Ligne 1 :
	imagettftext($imgFull, 100, 0, 30, 160, $black, $fontBI, 'AHL');
	$shift = GetShift($fontBI, 'AHL');
	imagettftext($imgFull, 100, 0, 30 + $shift, 160, $black, $fontB,  ' contre');
	$shift += GetShift($fontB, ' contre ');
	imagettftext($imgFull, 100, 0, 30 + $shift, 160, $black, $fontBI, 'Le Monde');
	
	// Ligne 2 :
	imagettftext($imgFull, 100, 0, 30, 320, $black, $font,  'Score selon');
	$shift = GetShift($font, 'Score selon ');
	imagettftext($imgFull, 100, 0, 30 + $shift, 320, $black, $fontI, 'Le Monde');
	$shift += GetShift($fontI, 'Le Monde');
	imagettftext($imgFull, 100, 0, 30 + $shift, 320, $black, $font,  ' :');
	$shift += GetShift($font, ' : ');
	imagettftext($imgFull, 100, 0, 30 + $shift, 320, $black, $fontI, 'AHL');
	$shift += GetShift($fontI, 'AHL');
	$shift += GetShift($font, ' ');
	$shift += GetShift($fontB, $score);
	$shift -= GetShift($fontB, '0');
	imagettftext($imgFull, 100, 0, 30 + $shift, 320, $black, $fontB, '0');
	$shift += GetShift($fontB, '0');
	imagettftext($imgFull, 100, 0, 30 + $shift, 320, $black, $fontB, ' -');
	$shift += GetShift($fontB, ' - ');
	imagettftext($imgFull, 100, 0, 30 + $shift, 320, $black, $fontB, $score);
	$shift += GetShift($fontB, $score);
	$shift += GetShift($font, ' ');
	imagettftext($imgFull, 100, 0, 30 + $shift, 320, $black, $fontI, 'Le Monde');
	
	// Ligne 2 :
	imagettftext($imgFull, 100, 0, 30, 480, $black, $font,  'Score selon');
	$shift = GetShift($font, 'Score selon ');
	imagettftext($imgFull, 100, 0, 30 + $shift, 480, $black, $fontI, 'AHL');
	$shift += GetShift($fontI, 'AHL');
	imagettftext($imgFull, 100, 0, 30 + $shift, 480, $black, $font,  ' :');
	$shift -= GetShift($fontI, 'AHL');
	$shift += GetShift($fontI, 'Le Monde');
	$shift += GetShift($font, ' : ');
	imagettftext($imgFull, 100, 0, 30 + $shift, 480, $black, $fontI, 'AHL');
	$shift += GetShift($fontI, 'AHL');
	$shift += GetShift($font, ' ');
	imagettftext($imgFull, 100, 0, 30 + $shift, 480, $black, $fontB, $score);
	$shift += GetShift($fontB, $score);
	imagettftext($imgFull, 100, 0, 30 + $shift, 480, $black, $fontB, ' -');
	$shift += GetShift($fontB, ' - ');
	$shift += GetShift($fontB, $score);
	$shift -= GetShift($fontB, '0');
	imagettftext($imgFull, 100, 0, 30 + $shift, 480, $black, $fontB, '0');
	$shift += GetShift($fontB, '0');
	$shift += GetShift($font, ' ');
	imagettftext($imgFull, 100, 0, 30 + $shift, 480, $black, $fontI, 'Le Monde');
	
	// Finalisation :
	imagefilter($imgFull, IMG_FILTER_SMOOTH, 10);
	imagecopyresized($imgResized, $imgFull, 0, 0, 0, 0, $resizedW, $resizedH, $fullW, $fullH);
	imagepng($imgResized, null, 9);
?>
Comme tu vois j'ai déjà prévu de la faire petite, mais en passant quand même par une grande avant vu que générer le texte en petit ça fait aucun lissage.

Pour ce qui est de l'ajout du texte, c'est surtout compliqué (à suivre) parce que je jongle avec les mises en forme et que je récupère dynamiquement le décalage provoqué.
Quizzman
Admin
Admin
Messages : 15246
Inscription : jeu. 20 oct. 2005 - 19:19
Localisation : Maybe behind you...
Contact :

Message par Quizzman »

De manière rudimentaire, tu peux afficher un truc en te faisant 'achement moins chier:

Code : Tout sélectionner

<?php
// Header + taille du fichier, voilà voilà
header ("Content-type: image/png");
$image = imagecreate(500,50);

// Là tu met ton super script pour ton score de la mort qui tue
$score = 1;

// Les ptites couleurs
$blanc = imagecolorallocate($image, 255, 255, 255);
$noir = imagecolorallocate($image, 0, 0, 0);

// Le texte.
imagestring($image, 5, 0, 0, "AHL contre le Monde", $noir);

imagestring($image, 4, 0, 20, "Score selon", $noir);
imagestring($image, 5, 95, 20, "AHL :", $noir);

imagestring($image, 4, 200, 20, "AHL", $noir);
imagestring($image, 5, 250, 20, ''. $score .'', $noir);
imagestring($image, 4, 300, 20, "-", $noir);
imagestring($image, 5, 350, 20, "0", $noir);
imagestring($image, 4, 400, 20, "Le Monde", $noir);

imagestring($image, 4, 0, 35, "Score selon", $noir);
imagestring($image, 5, 95, 35, "Le Monde :", $noir);

imagestring($image, 4, 200, 35, "AHL", $noir);
imagestring($image, 5, 250, 35, "0", $noir);
imagestring($image, 4, 300, 35, "-", $noir);
imagestring($image, 5, 350, 35, ''. $score .'', $noir);
imagestring($image, 4, 400, 35, "Le Monde", $noir);

// On transforme le blanc en transparent
imagecolortransparent($image, $blanc);

// Et on affiche l'image.
imagepng($image);
?>
C'est un code simple, facile à améliorer, mais en l'espèce il t'affiche ton image avec pas du texte dégueux tout baveux.
Un topic à mettre au musée ? Faites en la demande en m'envoyant un MP, j'ai la mémoire courte. :D
Image Image Image Image Image Image Image Image Image Image Image
Avatar de l’utilisateur
AHL 67
Correcteur PN
Correcteur PN
Messages : 3727
Inscription : lun. 17 avr. 2006 - 01:09
Localisation : Sur l'onglet d'à côté ^_^

Message par AHL 67 »

Ouais je sais mais du coup il manque la mise en forme... :-?
Et puis la simplicité, moi, j'aime pas. :P
L'autre solution serait de balancer uniquement une image pour le score, tout en gardant le reste sous forme de texte, mais là je perds l'avantage que me procurait la gestion du décalage qui faisait bien joli...

Nan moi là ce que je cherche vraiment c'est à lisser le texte quand il est trop petit, comme le fait un navigateur.

Au fait, c'était quoi le problème de la grande image ? Trop longue à charger ?



[Edit]
Au fait, le texte il est moins baveux en passant par une grande image que je réduis, même via GD, que si je le faisais direct petit...
Avatar de l’utilisateur
Feather
Silver Mario
Silver Mario
Messages : 5099
Inscription : mer. 22 juin 2005 - 09:27

Message par Feather »

C'est quoi ce compteur AHL VS Le monde ? Je ne m'attendais pas à ce qu'il augmente ...
Quizzman
Admin
Admin
Messages : 15246
Inscription : jeu. 20 oct. 2005 - 19:19
Localisation : Maybe behind you...
Contact :

Message par Quizzman »

AHL 67 a écrit :Au fait, c'était quoi le problème de la grande image ? Trop longue à charger ?
Elle se réduisait pas. (et accessoirement c'était pas utile, ça restait hyper baveux)
Un topic à mettre au musée ? Faites en la demande en m'envoyant un MP, j'ai la mémoire courte. :D
Image Image Image Image Image Image Image Image Image Image Image
Avatar de l’utilisateur
AHL 67
Correcteur PN
Correcteur PN
Messages : 3727
Inscription : lun. 17 avr. 2006 - 01:09
Localisation : Sur l'onglet d'à côté ^_^

Message par AHL 67 »

@Feather :
C'est rapport à mes interventions sur le forum, plus que plébiscitées. :roll:

@Quizzman :
Comme dit, si la grande était baveuse après passage au script, c'est la faute à FF/Opéra qui sont nuls en redimensionnement.

Bon, je vais voir si ça peut donner quelque chose d'intéressant avec imagestring, mais d'après ce que j'en ai vu quand j'avais testé, ça m'étonnerait...
Avatar de l’utilisateur
Gontrand00
Silver Mario
Silver Mario
Messages : 5162
Inscription : sam. 28 juin 2008 - 13:31

Message par Gontrand00 »

AHL 67 a écrit :@Feather :
C'est rapport à mes interventions sur le forum, plus que plébiscitées. :roll:
Alors t'as fais une erreur, faut inverser les chiffres.
What if deja vu means you actually died and are returning to your last checkpoint ?
Avatar de l’utilisateur
AHL 67
Correcteur PN
Correcteur PN
Messages : 3727
Inscription : lun. 17 avr. 2006 - 01:09
Localisation : Sur l'onglet d'à côté ^_^

Message par AHL 67 »

Les inverser ?!? :?:



Toujours est-il que c'est fait, la version imagestring est opérationnelle. Même que ça ressemble à peu près à quelque chose, mais pour ça j'ai dû me faire chier : je me suis fait mes propres polices... :biggol:
Et faire une police, mine de rien, même à partir de copies d'écran du texte, ça prend son temps. Et encore, là j'ai fait du Courier New, une police à largeur fixe, où certains caractères ont tout de même des morceaux qui dépassent quand ils sont en gras et/ou italique... Je comptais me faire le Verdana du forum dans la foulée, mais vu que c'est un police à largeur variable, pour ajuster chaque caractère, j'ai pas fini... :crazy:



Bref, le code est donc devenu ça :

Code : Tout sélectionner

<?php
header('Content-Type: image/png');

// Ajout de chaque char séparément pour les coller un peu :
function PutText($font, $x, $y, $text)
    {
    for ($i = 0; isset($text[$i]); $i++)
        imagestring($GLOBALS['img'], $font, $x + $i*$GLOBALS['charW'], $y, $text[$i], $GLOBALS['black']);
    return $i;
    }

// Score :
$score = [Z'AVEZ TOUJOURS PAS DEVINÉ !];

// Polices :
$font   = imageloadfont('../CMS/data/fonts/CourierNew10.font');
$fontB  = imageloadfont('../CMS/data/fonts/CourierNew10B.font');
$fontI  = imageloadfont('../CMS/data/fonts/CourierNew10I.font');
$fontBI = imageloadfont('../CMS/data/fonts/CourierNew10BI.font');
$charW  = 8; // En réalité ils font 9, mais à 8 c'est plus joli
$charH  = 17;

// Image :
$imgW = $charW*strlen('Score selon Le Monde : AHL '.$score.' - '.$score.' Le Monde') + 6;
$imgH = $charH*3 + 12;
$img  = imagecreatetruecolor($imgW, $imgH);

// Couleurs :
$white = imagecolorallocate($img, 255, 255, 255);
$black = imagecolorallocate($img, 0, 0, 0);

// Remplissage de l'image :
imagefill($img, 0, 0, $white);
imagecolortransparent($img, $white);

// Ligne 1 :
$shift  = PutText($fontBI, 3, 3, 'AHL');
$shift += PutText($fontB,  3 + $charW*$shift, 3, ' contre ');
$shift += PutText($fontBI, 3 + $charW*$shift, 3, 'Le Monde');

// Ligne 2 :
$shift  = PutText($font,  3, $charH + 6, 'Score selon ');
$shift += PutText($fontI, 3 + $charW*$shift, $charH + 6, 'Le Monde');
$shift += PutText($font,  3 + $charW*$shift, $charH + 6, ' : ');
$shift += PutText($fontI, 3 + $charW*$shift, $charH + 6, 'AHL ');
$shift += strlen($score) - strlen('0');
$shift += PutText($fontB, 3 + $charW*$shift, $charH + 6, '0 - '.$score);
$shift += PutText($fontI, 3 + $charW*$shift, $charH + 6, ' Le Monde');

// Ligne 3 :
$shift  = PutText($font,  3, 2*$charH + 9, 'Score selon ');
$shift += PutText($fontI, 3 + $charW*$shift, 2*$charH + 9,'AHL');
$shift += PutText($font,  3 + $charW*$shift, 2*$charH + 9,' : ');
$shift += strlen('Le Monde') - strlen('AHL');
$shift += PutText($fontI, 3 + $charW*$shift, 2*$charH + 9,'AHL');
$shift += PutText($fontB, 3 + $charW*$shift, 2*$charH + 9, ' '.$score.' - ');
$shift += strlen($score) - strlen('0');
$shift += PutText($fontB, 3 + $charW*$shift, 2*$charH + 9, '0 ');
$shift += PutText($fontI, 3 + $charW*$shift, 2*$charH + 9, 'Le Monde');

// Sortie :
imagepng($img, null, 9);
?>
Je garde mon calcul du décalage en dynamique pour pas être coincé si je veux changer un peu le texte. J'ai quand même réussi à vachement le simplifier. :cloud:
Quizzman
Admin
Admin
Messages : 15246
Inscription : jeu. 20 oct. 2005 - 19:19
Localisation : Maybe behind you...
Contact :

Message par Quizzman »

Nice, mais effectivement tu t'es fait chier. :@
Un topic à mettre au musée ? Faites en la demande en m'envoyant un MP, j'ai la mémoire courte. :D
Image Image Image Image Image Image Image Image Image Image Image
Avatar de l’utilisateur
AHL 67
Correcteur PN
Correcteur PN
Messages : 3727
Inscription : lun. 17 avr. 2006 - 01:09
Localisation : Sur l'onglet d'à côté ^_^

Message par AHL 67 »

Ouais mais j'aime ça. :P

Prochaine étape, me faire chier à faire la police du Verdana (versions normale, gras, italique et les 2, bien sûr). 14 pixels de large pour un "i" ou un "l", vous croyez que ça suffira ? :biggol:
LzK
Silver Mario
Silver Mario
Messages : 6265
Inscription : sam. 04 mai 2002 - 02:00
Localisation : ??

Message par LzK »

Moi je crois que c'est de la merde, mais ça n'engage que moi.
- ? -
Synyster
Super Mario Bros
Super Mario Bros
Messages : 1419
Inscription : lun. 20 nov. 2006 - 22:42

Message par Synyster »

LzK a écrit :Moi je crois que c'est de la merde, mais ça n'engage que moi.
+1

En tout cas t'as l'air de te faire sacrément chier dans ta vie mec
Avatar de l’utilisateur
Gontrand00
Silver Mario
Silver Mario
Messages : 5162
Inscription : sam. 28 juin 2008 - 13:31

Message par Gontrand00 »

Synyster a écrit :
LzK a écrit :Moi je crois que c'est de la merde, mais ça n'engage que moi.
+1

En tout cas t'as l'air de te faire sacrément chier dans ta vie mec
Vous connaissez le dicton ''Don't feed the troll'' ? :@
What if deja vu means you actually died and are returning to your last checkpoint ?
Avatar de l’utilisateur
AHL 67
Correcteur PN
Correcteur PN
Messages : 3727
Inscription : lun. 17 avr. 2006 - 01:09
Localisation : Sur l'onglet d'à côté ^_^

Message par AHL 67 »

@Synyster :
Disons plutôt que j'explore de nouveaux horizons dans ma vie de programmeur et que j'aime que les choses soient bien faites.

@Gontrand00 :
Parce ce que dire simplement ce qu'on aime ou fait de sa vie c'est du troll, maintenant ? :-?

Répondre