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 10/09/2006, 11h12   #1
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Par défaut [ImageMagick] imagecopyresized erreur resource

Bonjour,

J'ai un formulaire qui me charge une image de mon disque dur et qui a pour but de redimensionner cette image pour la sauvegarder ensuite dans un autre répertoire sous un autre nom et avec les nouvelles dimensions.

Je suis débutant sur l'utilisation de cette bibliothèque et j'aurais besoin d'aide pour le redimensionnement.

Voilà ce que j'ai écrit

Code :
1
2
3
4
5
6
7
$img = $_FILES['image']['tmp_name']; #Fichier de l'image téléchargée
$imagesize = getimagesize("$img"); #Dimensions actuelles de l'image
$width = $imagesize[0];
$height = $imagesize[1];
$factor = 300 / $width; #Facteur de rétrécissement pour 300px de largeur
$newheight = $height * $factor; #Nouvelle hauteur en conservant les proportions
imagecopyresized("chemin/vers/images/$target", $img, 0, 0 ,0, 0, 300, $newheight, $width, $height);
EDIT : $target est défini plus haut dans le script comme un nom d'image du genre image.jpg

En débugant j'ai confirmé que tout fonctionne sauf la fonction imagecopyresized qui me génère l'erreur suivante

Citation:
Warning: imagecopyresized(): supplied argument is not a valid Image resource in /resize.php
Je crois ne pas bien saisir la différence entre resource de l'image et nom de l'image. Que dois-je faire?

Merci!

webrider
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2006, 12h45   #2
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut,

Un nom de l'image, c'est une chaine représentant la position de l'image sur le disque, exemple :
C:/photos/image.jpg
/home/login/image.jpg
chemin/vers/images/$target


Les fonctions de GD travaillent avec des ressources, jamais avec les fichiers directement. C'est un peu comme pour les fichiers.
Par exemple pour un fichier, tu fais :
Code :
1
2
3
$fichier = fopen("dossier1/dossier2/fichier.txt", "w");
fwrite($fichier, "Salut !");
fclose($fichier);
Ici $fichier représente une ressource sur un fichier.

Avec GD, on utilise $ressource = imagecreatefromjpeg("chemin/vers/image.jpg") pour créer une ressource image à partir d'un fichier sur le disque, et imagejpeg($ressource, "chemin/vers/image.jpg") pour créer un fichier sur le disque a partir d'une ressource image. Durant tout le traitement, $ressource sera une représentation de l'image sur laquelle tu pourras travailler, mais aucun changement apporté à la ressource ne sera enregistré dans le fichier avant un appel a imagejpeg().
Exemple:
Code :
1
2
3
$img = imagecreatefromjpeg("chemin/vers/$target"); // ouvrir l'image
imagerectangle($img, 10, 10, 20, 20, $color); // fonction sur l'image
imagejpeg($img, "chemin/vers/$target"); // enregistre les modifications
Pour créer une ressource image vide, on utilise la fonction imagecreatetruecolor(largeur, hauteur).

En espérant que ça t'aide
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2006, 14h25   #3
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Oui bien sûr que ça m'aide! Merci!

Je voyais bien les ressources sur les manipulations de fichiers, pendant un temps je pensais même devoir faire un fopen sur l'image...

En gros c'est pareil mais avec les fonctions intégrées à la bibliothèque GD.

Je ne vais pas avoir le temps de tester ça cet après-midi donc ne sachant pas si j'aurai d'autres questions ou problèmes je ne mets pas encore le tag résolu.

Bon dimanche!

webrider
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2006, 16h58   #4
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Ca aurait été trop beau si il n'y avait pas de problème!

Le fichier vers lequel je veux enregistrer l'image n'existe pas, j'ai vu dans la doc que je devais envoyer un header avec le type de l'image pour créer celle-ci. Je l'ai fait et l'image est bien créée.

Le problème c'est qu'après la sauvegarde j'ai encore des choses à traiter dans mon script, des choses que je ne peux malheureusement pas mettre avant de créer l'image et d'envoyer le header. De plus, je voudrais afficher des informations à l'écran mais la seule chose que j'ai c'est :

- dans le titre du navigateur : script.php (Image JPEG)
- dans le navigateur : l'URL du script

Je sais que je ne peux plus rien afficher vu que le navigateur pense avoir à faire à un contenu de type image... Comment régler ce petit souci?

Merci!

webrider
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2006, 21h24   #5
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Je ne comprend pas exactement ton problème

Si tu veux enregistrer l'image modifiée dans un fichier (même si il n'existe pas encore), tu n'as pas a envoyer de header spécial. Il suffit d'utiliser imagejpeg().
Ton script peut continuer normalement et afficher une page HTML en réponse à la soumission du formulaire.
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2006, 21h36   #6
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Merci pour ta réponse.

Sur le site php.net à propos de imagejpeg()
Citation:
Le nom du fichier est optionnel et, s'il n'est pas fourni, l'image sera transmise directement à la sortie standard. En envoyant un content-type image/jpeg (grâce à la fonction header()), vous pouvez créer des images JPEG avec des scripts PHP.
Quand je n'envoie pas de header php m'indique qu'il ne sait pas ouvrir la cible pour y écrire, et c'est normal puisque l'image n'existe pas encore. Avec header("Content-Type: image/jpeg") ça fonctionne mais comme je t'ai dit le navigateur s'attend à une image et non plus à du code HTML...

Ou alors je crée d'abord un fichier vide?

webrider
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2006, 09h15   #7
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Autre petite question juste pour savoir... Comment faire pour afficher une image créée avec gd à un endroit précis sur une page sans nécessairement la sauvegarder sur le disque?

Par exemple, les sites utilisant les images pour afficher un code à entrer (anti-bot) ne sauvegardent pas l'image mais l'affiche à un endroit bien précis...

C'est de la curiosité mais c'est toujours bon à savoir!

webrider

EDIT : j'ai voulu essayer ça mais... avant de pouvoir afficher l'image je dois envoyer un header alors que je suis dans le script donc ça plante... et j'ai le classique message d'erreur
Citation:
Warning: Cannot modify header information - headers already sent by (output started at /usr/local/include/php/pages.class:58)
Il faut créer l'image puis l'insérer par <img src...> ??
__________________
Pensez au tag
webrider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2006, 11h22   #8
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
* Soit tu fait :
Code :
<img src="fichier.php">
et fichier.php contient :

Code :
1
2
header(... jpeg...);
imagejpeg($im);
* Soit tu fait :
et pour cela, il faut que, AVANT, un script php ait fait :
Code :
imagejpeg($im, 'image.jpg');
(pas de header dans ce cas là, ton script php créé une image, mais il n'EST PAS lui meme une image, c'est un script "normal".)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2006, 13h33   #9
Membre éprouvé
 
Homme
Inscription : mai 2006
Messages : 694
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : Belgique

Informations forums :
Inscription : mai 2006
Messages : 694
Points : 417
Points : 417
Merci pour ce complément d'informations, ça fonctionne très bien maintenant.

webrider
__________________
Pensez au tag
webrider 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 16h45.


 
 
 
 
Partenaires

Hébergement Web