Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > Imagick
Imagick Forum d'entraide pour l'extension Imagick permettant de manipuler des images en PHP (port de l'API ImageMagick).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2007, 14h46   #1
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
Par défaut [ImageMagick] imagejpeg : impossible d'enregistrer l'image

salut,
je suis en train d'écrire un peu script pour redimensionner des images placées dans un dossier. J'ai un message d'erreur :
Code :
1
2
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'photo' 
for writing in /var/www/test/resizeImg/resize_function.php on line 52
voici ma fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function resize($file){
	$path = $this->f.'/'.$file;
	$imgSrc = imagecreatefromjpeg($path);
	$newImg = imagecreatetruecolor($this->w,$this->h);
	imagecopyresampled($newImg,$imgSrc,0,0,0,0,$this->w,$this->h,$width,$height);	
	if (imagejpeg($imgSrc,$this->newFolderName)){ //**LIGNE 52****
		imagedestroy($imgSrc);
		imagedestroy($newImg);
		return true;
	}
	else {
		imagedestroy($imgSrc);
		imagedestroy($newImg);
		$this->result = $file.' problem <br>';
		return false;
	}
}
pourtant mon dossier est bien accessible en écriture. J'ai même fait un chmod 777 pour être sûr !!
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 15h03   #2
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
essaye de faire ça:

Code :
1
2
3
4
5
6
 
// Remplace ceci
imagecopyresampled($newImg,$imgSrc,0,0,0,0,$this->w,$this->h,$width,$height);
 
// Par ceci
imagecopyresized($newImg, $imgSrc, 0, 0, 0, 0, $this->w, $this->h, $width, $height);
Mais je ne comprend pas d'où viennent les varaible $width et $height moi je ferais ceci ==> imagesx($imgSrc) et imagesy($imgSrc)
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 15h25   #3
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
salut,
merci pour ta réponse. Malheureusement ça ne fonctionne pas.

En fait, si j'affiche l'image dans le navigateur au lieu de l'enregistrer, c'est ok.

Le souci semble donc provenir de la fonction imagejpeg(); quand je mets le second argument pour sauver le fichier.

je viens de re-re-re-re-re-vérifier que mon dossier est bien autorisé en écriture !

Sinon concernant les valeurs $width et $height, j'avais viré quelques lignes de la fonction pour n'afficher que le principal. Je mets tout ci-dessous :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function resize($file){
	$path = $this->f.'/'.$file;
	$imgSrc = imagecreatefromjpeg($path);
	list($width,$height) = getimagesize($path);
	$this->setRatio($width,$height);
	$newImg = imagecreatetruecolor($this->w,$this->h);
	//imagecopyresampled($newImg,$imgSrc,0,0,0,0,$this->w,$this->h,$width,$height);	
	imagecopyresized($newImg, $imgSrc, 0, 0, 0, 0, $this->w, $this->h, $width, $height);
	if (imagejpeg($newImg,$this->newFolderName)){  //** ne fonctionne pas ****
	//if (imagejpeg($newImg)){ 	//** fonctionne bien ****
		imagedestroy($imgSrc);
		imagedestroy($newImg);
		return true;
	}
	else {
		imagedestroy($imgSrc);
		imagedestroy($newImg);
		return false;
	}
}
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 15h47   #4
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
ton $this->newFolderName il te retourne quoi ?
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 15h54   #5
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
je viens de trouver, enfin en regardant le code mis sur php.net à la fonction imagejpeg.
Yoteco était sur la bonne piste également. C'est tout bête mais j'indiquais le chemin du dossier sans indiquer le nom du fichier derrière.
ce qui donne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function resize($file){
	$srcPath = $this->f.'/'.$file;
	$destPath = $this->newFolderName.'/'.$file;
	$imgSrc = imagecreatefromjpeg($srcPath);
	list($width,$height) = getimagesize($srcPath);
	$this->setRatio($width,$height);
	$newImg = imagecreatetruecolor($this->w,$this->h);
	imagecopyresized($newImg, $imgSrc, 0, 0, 0, 0, $this->w, $this->h, $width, $height);
	if (imagejpeg($newImg,$destPath)){
		imagedestroy($imgSrc);
		imagedestroy($newImg);
		return true;
	}
	else {
		imagedestroy($imgSrc);
		imagedestroy($newImg);
		return false;
	}
}
merci pour votre aide
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 15h56   #6
Rédacteur
 
Avatar de Yoteco
 
Alain Sahli
Ingénieur développement logiciels
Inscription : décembre 2004
Messages : 1 086
Détails du profil
Informations personnelles :
Nom : Alain Sahli
Âge : 25

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2004
Messages : 1 086
Points : 1 479
Points : 1 479
Yoteco est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h57.


 
 
 
 
Partenaires

Hébergement Web