[GD] travailler de l'image via PHP

Mammouth du PHP | 843 Messages

13 mars 2008, 21:29

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 ;)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Eléphant du PHP | 124 Messages

14 mars 2008, 04:03

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)
---

Mammouth du PHP | 843 Messages

14 mars 2008, 11:44

ooops, j'ai pas vue le headers ;)
j'ai modifier mais toujour le même problème...
si quelqu'un peut venir à mon secour :)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non:

Petit nouveau ! | 9 Messages

14 mars 2008, 20:09

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]

Mammouth du PHP | 843 Messages

15 mars 2008, 23:23

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 ;)
:: contactez moi par MP ::
:non: NON au language SMS sur les forums :non: