Bonjour a tous, comme dis dans le titre, j'essaye désespérément de réaliser le redimensionnement d'une image en lui appliquant un watermark, aussi bien pour copyright les images :p que pour leur ajouter par exemple des taches de manières automatique.

Voila mon code avec la base qui vient de ta source graphi, modifier pour passer uniquement en GD.

<?php
class imgClass{
    public static $quality=90;
    public static $transparance=75;
    /**
    * Permet de redimensionner/cropper une image 
    * @param $img String Chemin absolu de l'image d'origine 
    * @param $dest String Chemin absolu de l'image générée (.jpg) 
    * @param $largeur Int Largeur de l'image générée, si 0 cette valeur sera calculé en fonction de la hauteur 
    * @param $hauteur Int Hauteur de l'image générée, si 0 cette valeur sera calculé en fonction de la largeur 
    * Si largeur et hauteur = 0 l'image gardera son format d'origine mais sera convertie en JPG 
    **/
    public static function resize($img,$dest,$largeur=0,$hauteur=0,$copyright=true,$dir_copy=''){
        // on test s'il y a un copyright
        if($copyright){
            $img=self::add_copy($img,$dest,$dir_copy);
        }
        // On récupère les dimensions de l'image
        $dimension=getimagesize($img);  
        $ratio=$dimension[0]/$dimension[1];// Et son ratio
        // On trouve les dimension finale 
        // (si on a passé 0 en paramètre c'est que l'on veut que le paramètre s'adapte pour conserver le ratio)
        if($largeur==0&&$hauteur==0){$largeur=$dimension[0];$hauteur=$dimension[1];}
        elseif($hauteur==0){$hauteur=round($largeur/$ratio);}
        elseif($largeur==0){$largeur=round($hauteur*$ratio);} 
        // Si on doit "cropper" l'image on cherche de cb de px on doit décaler l'image miniatures pour la centrer
        if($dimension[0]>($largeur/$hauteur)*$dimension[1]){$dimY=$hauteur;$dimX=round($hauteur*$dimension[0]/$dimension[1]);$decalX=($dimX-$largeur)/2;$decalY=0;}
        if($dimension[0]<($largeur/$hauteur)*$dimension[1]){$dimX=$largeur;$dimY=round($largeur*$dimension[1]/$dimension[0]);$decalY=($dimY-$hauteur)/2;$decalX=0;}
        if($dimension[0]==($largeur/$hauteur)*$dimension[1]){$dimX=$largeur;$dimY=$hauteur;$decalX=0;$decalY=0;}
        // On crée l'image avec la librairie GD  
        $miniature=imagecreatetruecolor($largeur,$hauteur);
        imagecolortransparent($miniature, imagecolorallocate($miniature, 0, 0, 0));
        if(substr($img,-4)==".jpg"||substr($img,-4)==".JPG"){
            $image=imagecreatefromjpeg($img);
            imagecopyresampled($miniature,$image,-$decalX,-$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
            imagejpeg($miniature,$dest,self::$quality);
        }
        if(substr($img,-4)==".png"||substr($img,-4)==".PNG"){
            $image=imagecreatefrompng($img);
            imagecopyresampled($miniature,$image,-$decalX,-$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
            imagepng($miniature,$dest,substr(self::$quality,0,-1),PNG_ALL_FILTERS);
        }
        if(substr($img,-4)==".gif"||substr($img,-4)==".GIF"){
            $image=imagecreatefromgif($img);
            imagecopyresampled($miniature,$image,-$decalX,-$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
            imagegif($miniature,$dest,self::$quality);
        }
        if(substr($img,-4)==".gif"||substr($img,-4)==".GIF"){
            $image=imagecreatefromwbmp($img);
            imagecopyresampled($miniature,$image,-$decalX,-$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
            imagewbmp($miniature,$dest);
        }  
        return true;  
    }
    public static function resize_copy($copyright,$largeur,$hauteur){
        $copyright_new_img=imagecreatetruecolor($largeur,$hauteur);
        imagecolortransparent($copyright_new_img,imagecolorallocate($copyright_new_img,0,0,0));
        $copyright_resised=imagecreatefrompng($copyright);
        imagecopyresampled($copyright_new_img,$copyright_resised,0,0,0,0,$largeur,$hauteur,$largeur,$hauteur);
        return imagepng($copyright_new_img,null,substr(self::$quality,0,-1),PNG_ALL_FILTERS);
    }
    public static function add_copy($img,$dest,$dir_copy=''){
        if($dir_copy==''){
            $copyright=DOCUMENT_ROOT.'includes/images/add-thumb/copyright.png';
            $dimension_copyright=getimagesize($copyright);
            $largeur_copyright=$dimension_copyright[0];
            $hauteur_copyright=$dimension_copyright[1];
            $dimension_image=getimagesize($img);
            $largeur_origine=$dimension_image[0];
            $hauteur_origine=$dimension_image[1];
            $image=imagecreatetruecolor($largeur_origine,$hauteur_origine);
            imagecolortransparent($image,imagecolorallocate($image,0,0,0));
            $explode=explode('.',$img);
            $extension_origine=strtolower($explode(count($explode)-1)]);
            if($extension_origine=='png'){
                $img_source=imagecreatefrompng($img);
            }elseif($extension_origine=='jpg'||$extension_origine=='jpeg'){
                $img_source=imagecreatefromjpeg($img);
            }elseif($extension_origine=='gif'){
                $img_source=imagecreatefromgif($img);
            }elseif($extension_origine=='bmp'){
                $img_source=imagecreatefromwbmp($img);
            }
            if($largeur_origine>$largeur_copyright||$hauteur_origine>$hauteur_copyright){
                $img_copyright=imagecreatefrompng(self::resize_copy($copyright,$largeur_origine,$hauteur_origine));
            }elseif($largeur_origine<$largeur_copyright||$hauteur_origine<$hauteur_copyright){
                $img_copyright=imagecreatefrompng(self::resize_copy($copyright,$largeur_origine,$hauteur_origine));
            }else{
                $img_copyright=imagecreatefrompng($copyright);
            }
            imagecopymerge($img_source,$img_copyright,0,0,0,0,$larg_copyright,$haut_copyright,self::$transparance);
            if($extension_origine=='png'){
                imagepng($img_source,$dest,substr(self::$quality,0,-1),PNG_ALL_FILTERS);
            }elseif($extension_origine=='jpg'||$extension_origine=='jpeg'){
                imagejpeg($im_source,$dest,self::$quality);
            }elseif($extension_origine=='gif'){
                imagegif($im_source,$dest,self::$quality);
            }elseif($extension_origine=='bmp'){
                imagewbmp($im_source,$dest);
            }
            return $dest;
        }else{
            $liste_copy=liste::GetAllFiles('includes/images/add-thumb/'.$dir_copy);
            $number_copyright=rand(0,(count($liste_copy)-1));
            $copyright=DOCUMENT_ROOT.$liste_copy$number_copyright];
            $dimension_copyright=getimagesize($copyright);
            $largeur_copyright=$dimension_copyright[0];
            $hauteur_copyright=$dimension_copyright[1];
            $dimension_image=getimagesize($img);
            $largeur_origine=$dimension_image[0];
            $hauteur_origine=$dimension_image[1];
            $image=imagecreatetruecolor($largeur_origine,$hauteur_origine);
            imagecolortransparent($image,imagecolorallocate($image,0,0,0));
            $explode=explode('.',$img);
            $extension_origine=strtolower($explode(count($explode)-1)]);
            if($extension_origine=='png'){
                $img_source=imagecreatefrompng($img);
            }elseif($extension_origine=='jpg'||$extension_origine=='jpeg'){
                $img_source=imagecreatefromjpeg($img);
            }elseif($extension_origine=='gif'){
                $img_source=imagecreatefromgif($img);
            }elseif($extension_origine=='bmp'){
                $img_source=imagecreatefromwbmp($img);
            }
            if($largeur_origine>$largeur_copyright||$hauteur_origine>$hauteur_copyright){
                $img_copyright=imagecreatefrompng(self::resize_copy($copyright,$largeur_origine,$hauteur_origine));
            }elseif($largeur_origine<$largeur_copyright||$hauteur_origine<$hauteur_copyright){
                $img_copyright=imagecreatefrompng(self::resize_copy($copyright,$largeur_origine,$hauteur_origine));
            }else{
                $img_copyright=imagecreatefrompng($copyright);
            }
            imagecopymerge($img_source,$img_copyright,0,0,0,0,$larg_copyright,$haut_copyright,self::$transparance);
            if($extension_origine=='png'){
                imagepng($img_source,$dest,substr(self::$quality,0,-1),PNG_ALL_FILTERS);
            }elseif($extension_origine=='jpg'||$extension_origine=='jpeg'){
                imagejpeg($im_source,$dest,self::$quality);
            }elseif($extension_origine=='gif'){
                imagegif($im_source,$dest,self::$quality);
            }elseif($extension_origine=='bmp'){
                imagewbmp($im_source,$dest);
            }
            return $dest;
        }
    }
}
?>

Le principe, on fait le redimensionnement du watermark selon la taille de l'image, on creer une nouvelle image au dimension d'origine dans le dossier des miniature et ensuite on applique le redimensionnement sur la grande miniature.

Voila, si l'un d'entre vous vois pourquoi ca marche pas, ou bien si vous connaissez une manière plus simple, merci de me l'indiquer :p

9 réponses


StanislasP
Auteur
Réponse acceptée

Ca c'est pour l'afficher. c'est génial mais fabrique plusieurs millier d'images a la secondes et ton serveur vas pas aimer. Ce que je cherche et c'est écris la haut c'est enregistrer l'image qui est générer afin de plus avoir a la fabriquer, juste a la charger.

Ce que je te conseille c'est de découper le script et de tester petit bout par petit bout parceque là l'erreur peut venir de pas mal de chose. Puis le code est un peu épais a débugguer :D

Bon j'ai presque tout résolue. J'ai bien au fur et a mesure, les images qui se créer et se modifie en dimension, seulement (car il en faut un :p) mon image en cours de manipulation juste après le imagecopymerge a bien le filtre watermark d'appliquer mais quand j'enregistre, le watermark n'est pas dessus. comment enregistrer la compilation des images?

Vous avez une idée?

Salut,

J'utilise un script assez simple pour présenter des jaquettes, il pourrait peut être t'aider, enfin je crois
Il fait plusieurs fonctions
Il crée une image de fond (vide)
Il écrit dessus un texte (avec choix de la police)
Il redimensionne une autre image png
Il compile les deux images en une seule...

Résultat, j'ai une image avec le titre et la jaquette en mini

Tu pourrais peut être l'adapter ou trouver la fonction que tu cherches, mais est-ce cela qu'il te faut ?
Si oui je te prépare une page regroupant ces fonctions car là elle est adaptée à mon site et rien n'est commenté

J'en utilise aussi un autre qui lui en plus enregistre les images...
Une étoile png et une jaquette png, ce qui donne....

Par contre je perd la transparence sur l'image de fond...
ou je poste la solution, mais je ne sais pas si on peut...

Ben en fait, mon problème c'est d'enregistrer avec php l'image qui est générer. C'est pas de la créer :p Post toujours, ça pourra aider d'autres personnes

Salut,

je vais préparer ça et découper la page en fonctions, ça sera plus clair,
mais pour sauvegarder un image sur le ftp c'est pour un png :

<?php
$destination = '/images/Nom_image_destination.png';
imagepng($image, $destination ); //enregistre l'image dans le répertoire images.
?>

non :p tu a pas lu la question, je watermark une image qui existe deja et je veux enregistrer l'image qui est generer. Seulement impossible pour le moment.

Ben tu as une image et tu veux mettre un copyright dessus ? non

$ImageSansCopyright='AA.png';
$copyright="images/copyright.png";
$rendu = imagecreatetruecolor(176, 248);
$fond = imagecolorallocatealpha($rendu, 255, 255, 255, 0);// fond blanc
imagefill($rendu, 0, 0, $fond);
imagealphablending($rendu, true);
$image1 = ImageCreateFromPNG($ImageSansCopyright);
$image2 = ImageCreateFromPNG($copyright);

imagecopy($rendu, $image1, 0, 0,0,0, 176, 248);
imagecopy($rendu, $image2, 0, 0, 0,0, 100, 100);
imagealphablending($rendu, false);
imagesavealpha($rendu, true);
imagepng($rendu, "tempo/ImageAvecCopyright.png"); /// <--- Sauvegarde la nouvelle image sur le ftp

ImageDestroy($rendu);
echo '<img src="tempo/ImageAvecCopyright.png" />';

Si ce n'est pas ça... désolé j'aurai réellement pas pigé la question ;)