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 17/07/2006, 04h37   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 48
Points : 14
Points : 14
Par défaut [ImageMagick] Problème de Watermarking

Salut!

J'essaie d'avoir un script qui upload et watermark la photo en meme temps.. mais ca ne marche pas... Il l'upload mais sans Watermark.

Voici le code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$dest_dossier = "Supprimé pour sécurité"; // Dossier ou vont les photos sur le SERVEUR (sta dire le chemin dacces)

					$http_dest = "/photosmembres/"; 

			    $dest_fichier = basename($photo['name']);

			    // formatage nom fichier

			    // enlever les accents

			    $dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');

			    // remplacer les caracteres autres que lettres, chiffres et point par _

			    $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);

          // WATERMARKING
										
					$watermark = imagecreatefromjpeg('logo2.jpg');  
					$watermark_width = imagesx($watermark);  
					$watermark_height = imagesy($watermark);  
					$image = imagecreatetruecolor($watermark_width, $watermark_height);  
					$image = imagecreatefromjpeg($photo['tmp_name']);  
					$size = getimagesize($photo['tmp_name']);  
					$dest_x = $size[0] - $watermark_width - 5;  
					$dest_y = $size[1] - $watermark_height - 5;  
					$lol = imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100);  
					$watermarked = imagejpeg($lol);  
					// copie du fichier
			    
			    move_uploaded_file($watermarked, $dest_dossier . $dest_fichier);

			    $db = mysql_connect($host, $login, $password);  // 1 

					mysql_select_db($base,$db);                    // 2 

					$now = date("d/m/Y");     

	        $query="INSERT INTO album_".$id."(date,lien,description) VALUES('".$now."','".$http_dest.$dest_fichier."','".$description."')";          // 3 

					mysql_query($query) 

					or die('Erreur pendant l\'envoi de données');
					imagedestroy($image);  
					imagedestroy($watermark);  
		}
yongblood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 09h04   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Je pense qu'il te faut spécifier le second paramètre de la fonction imagejpeg() afin de créer le fichier physique plutôt qu'une simple ressource en mémoire.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 16h04   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 48
Points : 14
Points : 14
Merci, je vais vérifier cette voie.
yongblood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 16h17   #4
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 48
Points : 14
Points : 14
Meh, ca marche pas.

J'ai changé les deux dernières lignes comme suis :

Code :
1
2
3
4
imagejpeg($lol, "tempfile1");  
// copie du fichier
 
move_uploaded_file("tempfile1", $dest_dossier . $dest_fichier);
yongblood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2006, 23h58   #5
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 48
Points : 14
Points : 14
J'ai essayé un nouveau code, mais ca marche pas plus.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
$filetype = substr($photo['tmp_name'],strlen($photo['tmp_name'])-4,4); 
$filetype = strtolower($filetype); 
if($filetype == ".gif")  $image = @imagecreatefromgif($photo);  
if($filetype == ".jpg")  $image = @imagecreatefromjpeg($photo);  
if($filetype == ".png")  $image = @imagecreatefrompng($photo);  
if (!$image) die(); 
$watermark = imagecreatefromgif('watermark.gif'); 
$imagewidth = imagesx($image); 
$imageheight = imagesy($image);  
$watermarkwidth =  imagesx($watermark); 
$watermarkheight =  imagesy($watermark); 
$startwidth = (($imagewidth - $watermarkwidth)/2); 
$startheight = (($imageheight - $watermarkheight)/2); 
imagecopy($image, $watermark,  $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight); 
imagejpeg($image, $dest_dossier.$dest_fichier); 
imagedestroy($image); 
imagedestroy($watermark);
yongblood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2006, 06h05   #6
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 48
Points : 14
Points : 14
Si ca peut vous aider, j'ai établi que l'arrêt se produit au die.. donc !image..

Je comprend vraiment pas. Si ca peut vous aider : mise en contexte

L'utilisateur upload une image dans un autre script, et ce script appele à la fonction uphoto pour ce faire.

La fonction uphoto comprend tout le code pour amener l'image du point a au point b, et est supposé faire le Watermarking.

Si ca peut vous aider... voici la fonction de a à z.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
function uphoto($photo, $id, $description) {
	// params
	unset($erreur);
	$extensions_ok = array('png', 'gif', 'jpg', 'jpeg', 'PNG', 'GIF', 'JPG', 'JPEG');
	$taille_max = 512000;
 
	// vérifications
	if(!in_array( substr(strrchr($photo['name'], '.'), 1), $extensions_ok ) )
	{
		$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
	}
 
	elseif( file_exists($photo['tmp_name'])
	and filesize($photo['tmp_name']) > $taille_max)
	{
		$erreur = 'Votre fichier doit faire moins de 500Ko !';
	}
	// copie du fichier
	if(!isset($erreur))
	{
		$host="localhost"; 	//Hôte
		$login="sherbsr_adminz";			//Login
		$password="1234mori";				//Pass
		$base="sherbsr_album";
		$dest_dossier = "/home/sherbsr/public_html/Photo Album/photos/"; // Dossier ou vont les photos sur le SERVEUR (sta dire le chemin dacces)
		$http_dest = "/Photo Album/photos/";
		$dest_fichier = basename($photo['name']);
 
		// formatage nom fichier
 
		// enlever les accents
		$dest_fichier = strtr($dest_fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
		// remplacer les caracteres autres que lettres, chiffres et point par _
		$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
 
		// WATERMARK
		$filetyp = substr($photo['tmp_name'],strlen($photo['tmp_name'])-4,4);
		$filetype = strtolower($filetyp);
		if($filetype == ".gif")  $image = imagecreatefromgif($photo['tmp_name']);
		if($filetype == ".jpg")  $image = imagecreatefromjpeg($photo['tmp_name']);
		if($filetype == ".png")  $image = imagecreatefrompng($photo['tmp_name']);
		if (!$image) die( "PROBLÈME!!!");
		$watermark = imagecreatefromgif('watermark.gif');
		$imagewidth = imagesx($image);
		$imageheight = imagesy($image);
		$watermarkwidth =  imagesx($watermark);
		$watermarkheight =  imagesy($watermark);
		$startwidth = (($imagewidth - $watermarkwidth)/2);
		$startheight = (($imageheight - $watermarkheight)/2);
		$mhmm = imagecopy($image, $watermark,  $startwidth, $startheight, 0, 0, $watermarkwidth, $watermarkheight);
		imagejpeg($mhmm, $dest_dossier.$dest_fichier);
		imagedestroy($image);
		imagedestroy($watermark);
		// copie du fichier
 
		//move_uploaded_file($result, $dest_dossier . $dest_fichier);
		$db = mysql_connect($host, $login, $password);  // 1
		mysql_select_db($base,$db);                    // 2
		$now = date("d/m/Y");
		$query="INSERT INTO album_".$id."(date,lien,description) VALUES('".$now."','".$http_dest.$dest_fichier."','".$description."')";          // 3
		mysql_query($query)
		or die('Erreur pendant l\'envoi de données');
	}
 
	else {
		echo $erreur;
	}
}
yongblood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2006, 00h32   #7
Candidat au titre de Membre du Club
 
Inscription : décembre 2004
Messages : 48
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 48
Points : 14
Points : 14
Mayday, je dois rendre le projet dans DEUX jours.
yongblood est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2006, 09h00   #8
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
tmp_name ne contient pas nécessairement l'extension réelle.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui 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 04h44.


 
 
 
 
Partenaires

Hébergement Web