Page 1 sur 1

[GD] travailler de l'image via PHP

Posté : 13 mars 2008, 21:29
par BeRoots
salut à tous :)

je viens de me mettre à GD pour pouvoir retravailler à ma guise certaines image en vue de leur publication. j'ai des petit problèmes pour débuter :?

1°) quel sont les differences de GD et Imagick (à part que Imagick est EXPERIMENTAL et à certain bug)?

Sinon, j'ai fait quelques tests mais j'ai souvent le message d'erreur suivant: "L'image “http://www.domain.fr/test.php” ne peut être affichée car elle contient des erreurs."
mon objectif est d'envoyer au navigateur via http, une image redimensionnée et que celle-ci soit insérée dans mon code source xhtml via une balise <img> avec des attribut title et alt mise à jour par mes soins

en gros quand je fait ceci qui fonctionne:
<?php
header("Content-type: image/png");

// on definit le chemin relatif au images par raport au script diaporama.php
$path = 'img/diaporama/mes_creations/';
$image_name = 'tux_rider.jpg';
// recuperation des dimensions propre à l'image
list($width, $height) = getimagesize($path.$image_name);
//on defint si portrait ou paysage
if($width > $height)
{
   $exposition = 'paysage';
   $new_width = 520;
   $new_height = 390;

}
else
{
   $exposition = 'portrait';
   $new_width = 292;
   $new_height = 390;
}


// Redimensionnement
$image_cree = imagecreatetruecolor($new_width, $new_height);
$image_src = imagecreatefromjpeg($path.$image_name);
imagecopyresampled($image_cree, $image_src, 0, 0, 0, 0, $new_width, $new_height, $width, $height);


imagejpeg($image_cree, null, 100);
imagedestroy($image_cree);
imagedestroy($image_src);
?>
2°) pourquoi je n'est pas de balise <img /> comme code source mais plutot une chaine de carateres etrange :-k ?

3°) je cherche a comprendre ou est l'image issue de imagejpeg() si null, c'est le cache navigateur sinon on precise un dossier avec les droit coté server, c'est ça?

merci d'avance pour votre soutient sur l'utilisation de cette lib GD ;)
Ps: voici un tuto externe sur GD afin d'aider tous ceux à qui se sujet pourrai servir ;)

Posté : 14 mars 2008, 04:03
par icebreak
A mon avis, ta chaine étrange c'est une image JPEG renvoyé par "imagejpeg($image_cree, null, 100); "
mais qui n'est pas interprétée parceque tu dis à ton browser de renvoyer une image PNG, hors les conversions
de types d'images, ça fonctionne pas comme ça ;)

Voir plus haut, "header("Content-type: image/png"); ".

Ton script ne renvois pas de balise HTML hein.
D'ailleurs, ta chaine étrange n'en est sûrement pas une, toutes les images
de types différents commencent toutes par les mêmes caractères. Ce qui
permet de différencier une JPEG d'une GIF ou d'une image PNG. (je parle surtout en BASE64 hein, mais c'est vrai que je suis brouillon dans mes explications)

Posté : 14 mars 2008, 11:44
par BeRoots
ooops, j'ai pas vue le headers ;)
j'ai modifier mais toujour le même problème...
si quelqu'un peut venir à mon secour :)

Posté : 14 mars 2008, 20:09
par valoo49
Salut moi perso j'ai crée un script pareil pour la redimension. J'en avais besoin quand je fesait un projet de conception d'une platforme multi-blog. voila mon code si cela peut t'aidé à oui aussi jai tous apri sur ce site "Le site du zér0" exélent site. voila le lien consernant ton pb "Le lien"

nb :
$max_largeur_img = '500';
$max_hauteur_img = '400';
$url_file = ''; //Url de l'image en question

Le code PHP :
			$max_largeur = $max_largeur_img;
			$max_hauteur = $max_hauteur_img;
			$source = imagecreatefromjpeg($url_file);
			$largeur_source = imagesx($source);
			$hauteur_source = imagesy($source);

			if ($largeur_source > $max_largeur)
				{
					$divis = $largeur_source / $max_largeur;
					$largeur_small = $largeur_source / $divis;
					$hauteur_small = $hauteur_source / $divis;
						if ($hauteur_small > $max_hauteur)
							{
								$divis = $hauteur_small / $max_hauteur;
								$hauteur_small = $hauteur_small / $divis;
								$largeur_small = $largeur_small / $divis;
							}	
				
					$destination = imagecreatetruecolor($largeur_small, $hauteur_small); // On crée la miniature vide
					imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_small, $hauteur_small, $largeur_source, $hauteur_source);
					imagejpeg($destination, './../articles/img_up/img.jpg');
				}
			elseif ($hauteur_source > $max_hauteur)
				{
					$divis = $hauteur_source / $max_hauteur;
					$hauteur_small = $hauteur_source / $divis;
					$largeur_small = $largeur_source / $divis;
						if ($largeur_small > $max_largeur)
							{
								$divis = $largeur_small / $max_largeur;
								$largeur_small = $largeur_small / $divis;
								$hauteur_small = $hauteur_small / $divis;
							}	
				$destination = imagecreatetruecolor($largeur_small, $hauteur_small);
					imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_small, $hauteur_small, $largeur_source, $hauteur_source);
					imagejpeg($destination, './../articles/img_up/img.jpg');
				}
[/url]

Posté : 15 mars 2008, 23:23
par BeRoots
merci pour ce code mais pour le moment cla s'égard somme toute de mes questions dans mon premier message.... (sinon c'est assez interessant comme exemple)

si quelqu'un à des reponse precise à celles-ci (sutout la 3°)
merci d'avance ;)