[RESOLU] Image 1 + Image 2 = Image 3

Eléphanteau du PHP | 42 Messages

10 juil. 2015, 21:24

Bonjour,

Je cherche à crée un jpeg a partir d'un jpeg + un png.
J'ai mon fichier photo en jpeg qui dépend de la navigation.
Un fichier image en png pour mon copyright
Et jeux veux créer un troisième et nouveau fichier jpeg avec ces deux là.

Mon code actuel ne marche pas et il me semble qu'il change le fichier photo au lieu d'en créer un nouveau.
Que dois-je faire ?

Bonne journée

Code : Tout sélectionner

// On charge d'abord les images $temp_loc = './scripts/doc_temp_copyright'; $copyright_img = imagecreatefrompng($temp_loc."/copyright.png"); // Le logo est la source $ma_photo = imagecreatefromjpeg($get_loc.'/'.$get_file); // La photo est la destination $largeur = imagesx($ma_photo); $hauteur = imagesy($ma_photo); // On met le logo (source) dans l'image de destination (la photo) imagecopymerge($ma_photo, $copyright_img, 0, 0, 0, 0, $largeur, $hauteur, 60); // On affiche l'image de destination qui a été fusionnée avec le logo imagejpeg($ma_photo, $temp_loc.'/temp.jpeg', 100); echo '<img src="'.$temp_loc.'/temp.jpeg" align="center">';
Modifié en dernier par westernz le 10 juil. 2015, 21:41, modifié 3 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

10 juil. 2015, 21:26

Bonjour,

Il me semble que la doc PHP a pensé à toi ;-)
http://php.net/manual/fr/image.examples-watermark.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 688 Messages

10 juil. 2015, 21:28

$mon_image et $ma_photo, je pense qu'il faut le même nom de variable.

Eléphanteau du PHP | 42 Messages

10 juil. 2015, 21:41

Le pire c'est d'oublier le mettre le : echo <img ...>
...
Ca marche un peu.
Mais le résultat est pas bon.
Ca prend le fond transparent du png comme un gris clair et non comme du transparent.

En fait j'ai un problème actuel de transparence.
Soit je vois le logo, soit je vois la photo, soit je vois un peu des deux et la photos est grisé même avec un logo png avec un fond transparent.

Je pense que le fond transparent du png passe en fond blanc que je le fusionne a jpg et que je le sauve en jpeg.
Je ne vois pas de solutions mise à part sauver en png, mais le png est trop lourd (3.5mo au lieu de 500ko)

... Je n'ai pas d'idée

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

10 juil. 2015, 22:50

As-tu essayé l'exemple de la doc ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 42 Messages

11 juil. 2015, 13:32

Oui j'ai lu les divers pages concernant mes divers functions utilisées et même juste essayées.

J'ai tenté d'ajouté :

Code : Tout sélectionner

$transp = imagecolorallocate($copyright_img, 255, 255, 255); imagecolortransparent($copyright_img, $transp);
avant le merge pour lui dire que le logo a une couleur transparent mais ça ne donne rien de bon.

J'ai essayé avec du gif.
C'était prometteur mais il met noir tout ce qui n'est pas du gif dans la taille du gif. En affichant quand même tout propre quand c'est dans la taille du gif.

Code : Tout sélectionner

$temp_loc = './scripts/doc_temp_copyright'; $temp_file = './scripts/doc_temp_copyright/temp.jpeg'; $copyright_img = imagecreatefromgif($temp_loc."/copyright.gif"); // Le logo est la source $ma_photo = imagecreatefromjpeg($get_loc.'/'.$get_file); // La photo est la destination $largeur = imagesx($ma_photo); $hauteur = imagesy($ma_photo); // On met le logo (source) dans l'image de destination (la photo) imagecopymerge($ma_photo, $copyright_img, 0, 0, 0, 0, $largeur, $hauteur, 100); // On affiche l'image de destination qui a été fusionnée avec le logo imagejpeg($ma_photo, $temp_file, 100); echo '<img src="'.$temp_file.'" align="center">';

Eléphanteau du PHP | 42 Messages

11 juil. 2015, 13:55

Au final. Du bricolage.

J'ai créé une image de filigrane en gif sans couleur de fond (un fond transparent).
Inutile de jouer avec l'opacité des claques elle sera supprimée.
L'image doit faire au moins la taille maximal des photos, soit pour moi 1000x1000px.
J'ai sauvé en gif 4 couleurs car je n'ai que 2 couleur + le fond transparent. Le fichier est donc très léger, 13ko.

Ma photo est un jpeg.
Je merge avec le gif à 50% de transparence pour le gif.

Avec du gif la photo doit au moins être égale à la taille de l'image qui sert de filigrane (je ne sais pas pourquoi).
Si l'image de filigrane est plus grande c'est pas grave. Elle sera coupée au format de la photo avec le merge.
Impossible de l'agrandir au format de la photo si jamais le gif est plus petit que la photo.

Résultat, ca fonctionne.

Code : Tout sélectionner

$temp_loc = './scripts/doc_temp_copyright'; $temp_file = './scripts/doc_temp_copyright/temp.jpeg'; $copyright_img = imagecreatefromgif($temp_loc."/copyright_gd.gif"); // Le logo est la source $ma_photo = imagecreatefromjpeg($get_loc.'/'.$get_file); // La photo est la destination $largeur = imagesx($ma_photo); $hauteur = imagesy($ma_photo); // On met le logo (source) dans l'image de destination (la photo) imagecopymerge($ma_photo, $copyright_img, 0, 0, 0, 0, $largeur, $hauteur, 50); // On affiche l'image de destination qui a été fusionnée avec le logo imagejpeg($ma_photo, $temp_file, 100); echo '<img src="'.$temp_file.'" align="center">';

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 juil. 2015, 14:01

Je ne comprends toujours pas ta logique...
:arrow: Tu as un exemple complet dans la doc qui fonctionne !
http://php.net/manual/fr/image.examples-watermark.php

Ça devrait être ça ton point de départ, tu vérifies que ça marche et ensuite tu l'adaptes à ton besoin.

Là tu bidouilles pour bricoler quelque chose...


Je viens de tester pour vérifier que l'exemple était bon et ça marche parfaitement :
photo.jpg
stamp.png
resultat.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 42 Messages

11 juil. 2015, 16:01

Moi non plus je ne comprend pas toujours ma logique.

Je retenterai plus tard mais là pour le moment ca marche.

Mais c'est surtout un problème d’extension.
Je ne veux pas terminer avec un png mais avec pjeg à cause du poids.