Page 1 sur 1

Exporter une miniature

Posté : 11 nov. 2008, 15:59
par sylvaing26
Bonjour, j'ai réalisé ce code qui fonctionne parfaitement lorsque l'on fait appel à lui mais je souhaiterai exporter enfin plutot enregistrer l'image obtenue sur le serveur et je ne sais pas comment faire
<?php
header ("Content-type: image/jpeg"); 
include("admin/connect.php");
@MYSQL_CONNECT($serveur,$utilisateur,$mdp) or die ("Connexion impossible");
@MYSQL_SELECT_DB($db) or die ("Connexion à la base $base impossible");
$id = $_GET['id'];
$p = $_GET['p'];
if($p == 1){
$sql = mysql_query("SELECT * FROM orchidees WHERE id='$id'");
while($result=mysql_fetch_array($sql)){
$source = $result[photo];
$photo = "photos/mini_$source";

$fichier_copyright = $photo;
$im_copyright = ImageCreateFromJpeg ($fichier_copyright);
// on calcule la largeur de l'image correspondant à la vignette de copyright  
$larg_copyright = imagesx ($im_copyright);
// on calcule la hauteur de l'image correspondant à la vignette de copyright  
$haut_copyright = imagesy ($im_copyright);
// on crée deux variables contenant les chemins d'accès à nos deux fichiers : $fichier_source contenant le lien vers l'image à "copyrighter", $fichier_copyright contenant le lien vers la petite vignette contenant le copyright (bien sur, on prendra soin de placer les images sources dans un répertoire "caché" sinon le copyright ne sert à rien si les visiteurs ont accès aux images sources)  
if($larg_copyright > $haut_copyright){
$fichier_source = "img/fd_miniature.jpg" ;
}
else {
$fichier_source = "img/fd_miniature_2.jpg" ;
}
// on crée nos deux ressources de type image (par le biais de la fonction ImageCreateFromJpeg)  
$im_source = ImageCreateFromJpeg ($fichier_source);
$im_copyright = ImageCreateFromJpeg ($fichier_copyright); 
// on calcule la largeur de l'image qui va être copyrightée  
$larg_destination = imagesx ($im_source);
$haut_destination = imagesy ($im_source);

// on calcule la position sur l'axe des abscisses de la vignette  
$x_destination_copyright = $haut_destination - $haut_copyright;
$y = $larg_destination - $larg_copyright - 11;
// on réalise la superposition, le dernier paramètre étant le degré de transparence de la vignette (cependant, allez voir la fin de ce même tutorial pour une définition complète de tous les arguments de cette fonction)  
imageCopyMerge ($im_source, $im_copyright, 0, 0, 0, 0, $larg_copyright, $haut_copyright, 100);
// on affiche notre image copyrightée 
Imagejpeg ($im_source);

}
}
elseif($p == 2){
$sql = mysql_query("SELECT * FROM orchidees WHERE id='$id'");
while($result=mysql_fetch_array($sql)){
$source = $result[photo_fleur];
$photo = "photos/mini_$source";

$fichier_copyright = $photo;
$im_copyright = ImageCreateFromJpeg ($fichier_copyright);
// on calcule la largeur de l'image correspondant à la vignette de copyright  
$larg_copyright = imagesx ($im_copyright);
// on calcule la hauteur de l'image correspondant à la vignette de copyright  
$haut_copyright = imagesy ($im_copyright);
// on crée deux variables contenant les chemins d'accès à nos deux fichiers : $fichier_source contenant le lien vers l'image à "copyrighter", $fichier_copyright contenant le lien vers la petite vignette contenant le copyright (bien sur, on prendra soin de placer les images sources dans un répertoire "caché" sinon le copyright ne sert à rien si les visiteurs ont accès aux images sources)  
if($larg_copyright > $haut_copyright){
$fichier_source = "img/fd_miniature.jpg" ;
}
else {
$fichier_source = "img/fd_miniature_2.jpg" ;
}
// on crée nos deux ressources de type image (par le biais de la fonction ImageCreateFromJpeg)  
$im_source = ImageCreateFromJpeg ($fichier_source);
$im_copyright = ImageCreateFromJpeg ($fichier_copyright); 
// on calcule la largeur de l'image qui va être copyrightée  
$larg_destination = imagesx ($im_source);
$haut_destination = imagesy ($im_source);

// on calcule la position sur l'axe des abscisses de la vignette  
$x_destination_copyright = $haut_destination - $haut_copyright;
$y = $larg_destination - $larg_copyright - 11;
// on réalise la superposition, le dernier paramètre étant le degré de transparence de la vignette (cependant, allez voir la fin de ce même tutorial pour une définition complète de tous les arguments de cette fonction)  
imageCopyMerge ($im_source, $im_copyright, 0, 0, 0, 0, $larg_copyright, $haut_copyright, 100);
// on affiche notre image copyrightée 
Imagejpeg ($im_source);
}
}
?>

Posté : 11 nov. 2008, 20:49
par VaN
dernière ligne de ton code, il suffit de fournir comme deuxième paramètre de la fonction imagejpeg le chemin où tu veux enregistrer l'image :

http://fr3.php.net/manual/en/function.imagejpeg.php

Posté : 14 nov. 2008, 19:36
par sylvaing26
ok, est ce que je dois garder le header ?

Posté : 14 nov. 2008, 20:00
par djtec
oui

Posté : 15 nov. 2008, 10:40
par sylvaing26
d'accord, merci beaucoup.
Une autre question complementaire,
est ce que tout en gardant le header je peux integrer ce script via un include() pour appeller par la suite la miniature generée et enregistrée sur le serveur dans mon <img> ?

Posté : 15 nov. 2008, 11:06
par djtec
non met se script dans une page que tu appel show.php par exemple et appel la dans la balise html img

Exemple:

Code : Tout sélectionner

<img src="show.php?id=$id&p=$p" />
Voilà

Posté : 15 nov. 2008, 12:50
par sylvaing26
d'accord, c'est deja ce que je fait, mais en fait ca surcharge le serveur car il y a beaucoup de miniatures a creer donc je voudrai qu'il créé, si il existe pas la miniature et qu'ensuite il l'appelle ou qu'il l'appelle directement si elle est deja crée sur le serveur.
http://hegoiseorchidees.free.fr
Lorsque l'on navigue de page en page, defois il n'y a pas toutes les miniatures de créé
En fait je souhaite reunir deux operatiosn en une pour alleger le serveur, j'ai un premier script qu cree une miniature reduite de la photo
<?
if($p == "true"){
$photo = $result['photo_fleur'];
}
else
{
$photo = $result['photo'];
}
$filename = "photos/mini_$photo";
if (!file_exists($filename)) {
$source = "/mnt/102/sdb/7/e/hegoiseorchidees/photos/$photo"; 
    $ImageChoisie = imagecreatefromjpeg($source);
    $TailleImageChoisie = getimagesize($source);
if($TailleImageChoisie[0]>$TailleImageChoisie[1])
{
//Etape 1 :
$NouvelleLargeur = 150;
 
//Etape 2 :
$Reduction = ( ($NouvelleLargeur * 100)/$TailleImageChoisie[0] );
 
//Etape 3 :
$NouvelleHauteur = ( ($TailleImageChoisie[1] * $Reduction)/100 );
}
else
{
//Etape 1 :
$NouvelleHauteur = 112;
 
//Etape 2 :
$Reduction = ( ($NouvelleHauteur * 100)/$TailleImageChoisie[1] );
 
//Etape 3 :
$NouvelleLargeur = ( ($TailleImageChoisie[0] * $Reduction)/100 );
}
//Etape 1 :
$NouvelleImage = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur"); 
//Etape 2 :
imagecopyresampled($NouvelleImage , $ImageChoisie, 0, 0, 0, 0, $NouvelleLargeur, $NouvelleHauteur, $TailleImageChoisie[0],$TailleImageChoisie[1]);
$background_color = imagecolorallocate ($NouvelleImage, 255, 255, 255);
imagefill($NouvelleImage,0,0,$background_color);
//////////////////

$miniature = "mini_$photo";  
$destination = "photos/$miniature";
ImageJpeg ($NouvelleImage,$destination, 100); 
}   
else
{
$miniature = "mini_$photo";
}
mysql_close();

?>
et un second que j'appelle pour ajouter le fond de la miniature a chaque fois
<?//------------------------------------------------------------------------------------------
//     applcation d'un copyright  sur une photo
//------------------------------------------------------------------------------------------
// on spécifie le type de fichier créer (ici une image de type jpeg) 
header ("Content-type: image/jpeg"); 
include("admin/connect.php");
@MYSQL_CONNECT($serveur,$utilisateur,$mdp) or die ("Connexion impossible");
@MYSQL_SELECT_DB($db) or die ("Connexion à la base $base impossible");
$id = $_GET['id'];
$p = $_GET['p'];
if($p == 1){
$sql = mysql_query("SELECT * FROM orchidees WHERE id='$id'");
while($result=mysql_fetch_array($sql)){
$source = $result[photo];
$photo = "photos/mini_$source";

$fichier_copyright = $photo;
$im_copyright = ImageCreateFromJpeg ($fichier_copyright);
// on calcule la largeur de l'image correspondant à la vignette de copyright  
$larg_copyright = imagesx ($im_copyright);
// on calcule la hauteur de l'image correspondant à la vignette de copyright  
$haut_copyright = imagesy ($im_copyright);
// on crée deux variables contenant les chemins d'accès à nos deux fichiers : $fichier_source contenant le lien vers l'image à "copyrighter", $fichier_copyright contenant le lien vers la petite vignette contenant le copyright (bien sur, on prendra soin de placer les images sources dans un répertoire "caché" sinon le copyright ne sert à rien si les visiteurs ont accès aux images sources)  
if($larg_copyright > $haut_copyright){
$fichier_source = "img/fd_miniature.jpg" ;
}
else {
$fichier_source = "img/fd_miniature_2.jpg" ;
}
// on crée nos deux ressources de type image (par le biais de la fonction ImageCreateFromJpeg)  
$im_source = ImageCreateFromJpeg ($fichier_source);
$im_copyright = ImageCreateFromJpeg ($fichier_copyright); 
// on calcule la largeur de l'image qui va être copyrightée  
$larg_destination = imagesx ($im_source);
$haut_destination = imagesy ($im_source);

// on calcule la position sur l'axe des abscisses de la vignette  
$x_destination_copyright = $haut_destination - $haut_copyright;
$y = $larg_destination - $larg_copyright - 11;
// on réalise la superposition, le dernier paramètre étant le degré de transparence de la vignette (cependant, allez voir la fin de ce même tutorial pour une définition complète de tous les arguments de cette fonction)  
imageCopyMerge ($im_source, $im_copyright, 0, 0, 0, 0, $larg_copyright, $haut_copyright, 100);
// on affiche notre image copyrightée 
Imagejpeg ($im_source);

}
}
elseif($p == 2){
$sql = mysql_query("SELECT * FROM orchidees WHERE id='$id'");
while($result=mysql_fetch_array($sql)){
$source = $result[photo_fleur];
$photo = "photos/mini_$source";

$fichier_copyright = $photo;
$im_copyright = ImageCreateFromJpeg ($fichier_copyright);
// on calcule la largeur de l'image correspondant à la vignette de copyright  
$larg_copyright = imagesx ($im_copyright);
// on calcule la hauteur de l'image correspondant à la vignette de copyright  
$haut_copyright = imagesy ($im_copyright);
// on crée deux variables contenant les chemins d'accès à nos deux fichiers : $fichier_source contenant le lien vers l'image à "copyrighter", $fichier_copyright contenant le lien vers la petite vignette contenant le copyright (bien sur, on prendra soin de placer les images sources dans un répertoire "caché" sinon le copyright ne sert à rien si les visiteurs ont accès aux images sources)  
if($larg_copyright > $haut_copyright){
$fichier_source = "img/fd_miniature.jpg" ;
}
else {
$fichier_source = "img/fd_miniature_2.jpg" ;
}
// on crée nos deux ressources de type image (par le biais de la fonction ImageCreateFromJpeg)  
$im_source = ImageCreateFromJpeg ($fichier_source);
$im_copyright = ImageCreateFromJpeg ($fichier_copyright); 
// on calcule la largeur de l'image qui va être copyrightée  
$larg_destination = imagesx ($im_source);
$haut_destination = imagesy ($im_source);

// on calcule la position sur l'axe des abscisses de la vignette  
$x_destination_copyright = $haut_destination - $haut_copyright;
$y = $larg_destination - $larg_copyright - 11;
// on réalise la superposition, le dernier paramètre étant le degré de transparence de la vignette (cependant, allez voir la fin de ce même tutorial pour une définition complète de tous les arguments de cette fonction)  
imageCopyMerge ($im_source, $im_copyright, 0, 0, 0, 0, $larg_copyright, $haut_copyright, 100);
// on affiche notre image copyrightée 
Imagejpeg ($im_source);
}
}
?>
Je voudrais savoir comment zapper l'operation 1, appliquer le fond sans sauvegarder une miniature de la photo et sauvegarder plutot la miniature finale.

Posté : 15 nov. 2008, 20:19
par djtec
Fusionne tes deux scripts en un.

Puis vérifie avec la fonction file_exists() si une miniature existe déjà et si elle n'existe pas lance le script pour qu'il la crée.

Posté : 15 nov. 2008, 20:26
par sylvaing26
J'ai reussi a fusionner les deux scripts
<?
if($p == "true"){
$photo = $result['photo_fleur'];
}
else
{
$photo = $result['photo'];
}
$filename = "photos/mini_$photo";
if (!file_exists($filename)) {
$source = "photos/$photo"; 
    $ImageChoisie = imagecreatefromjpeg($source);
    $TailleImageChoisie = getimagesize($source);
if($TailleImageChoisie[0]>$TailleImageChoisie[1])
{
//Etape 1 :
$NouvelleLargeur = 150;
 
//Etape 2 :
$Reduction = ( ($NouvelleLargeur * 100)/$TailleImageChoisie[0] );
 
//Etape 3 :
$NouvelleHauteur = ( ($TailleImageChoisie[1] * $Reduction)/100 );
}
else
{
//Etape 1 :
$NouvelleHauteur = 112;
 
//Etape 2 :
$Reduction = ( ($NouvelleHauteur * 100)/$TailleImageChoisie[1] );
 
//Etape 3 :
$NouvelleLargeur = ( ($TailleImageChoisie[0] * $Reduction)/100 );
}
//Etape 1 :
$NouvelleImage = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur"); 
//Etape 2 :
imagecopyresampled($NouvelleImage , $ImageChoisie, 0, 0, 0, 0, $NouvelleLargeur, $NouvelleHauteur, $TailleImageChoisie[0],$TailleImageChoisie[1]);
$background_color = imagecolorallocate ($NouvelleImage, 255, 255, 255);
imagefill($NouvelleImage,0,0,$background_color);
//////////////////

$miniature = "mini_$photo";  
$destination = "photos/$miniature";
ImageJpeg ($NouvelleImage,$destination, 100); 
}   
else
{
$miniature = "mini_$photo";
}
mysql_close();
$source = $result['photo'];
$photo = "photos/mini_$source";
$filename ="photos/vignettes/$source";
if (!file_exists($filename)) {
$fichier_copyright = $photo;
$im_copyright = ImageCreateFromJpeg ($fichier_copyright);
// on calcule la largeur de l'image correspondant à la vignette de copyright  
$larg_copyright = imagesx ($im_copyright);
// on calcule la hauteur de l'image correspondant à la vignette de copyright  
$haut_copyright = imagesy ($im_copyright);
// on crée deux variables contenant les chemins d'accès à nos deux fichiers : $fichier_source contenant le lien vers l'image à "copyrighter", $fichier_copyright contenant le lien vers la petite vignette contenant le copyright (bien sur, on prendra soin de placer les images sources dans un répertoire "caché" sinon le copyright ne sert à rien si les visiteurs ont accès aux images sources)  
if($larg_copyright > $haut_copyright){
$fichier_source = "img/fd_miniature.jpg" ;
}
else {
$fichier_source = "img/fd_miniature_2.jpg" ;
}
// on crée nos deux ressources de type image (par le biais de la fonction ImageCreateFromJpeg)  
$im_source = ImageCreateFromJpeg ($fichier_source);
$im_copyright = ImageCreateFromJpeg ($fichier_copyright); 
// on calcule la largeur de l'image qui va être copyrightée  
$larg_destination = imagesx ($im_source);
$haut_destination = imagesy ($im_source);

// on calcule la position sur l'axe des abscisses de la vignette  
$x_destination_copyright = $haut_destination - $haut_copyright;
$y = $larg_destination - $larg_copyright - 11;
// on réalise la superposition, le dernier paramètre étant le degré de transparence de la vignette (cependant, allez voir la fin de ce même tutorial pour une définition complète de tous les arguments de cette fonction)  
imageCopyMerge ($im_source, $im_copyright, 0, 0, 0, 0, $larg_copyright, $haut_copyright, 100);
// on affiche notre image copyrightée 
$dossier = "photos/vignettes/$source";
Imagejpeg ($im_source,$dossier);
}
else{
$dossier = "photos/vignettes/$source";
}
seulement je suis toujours obligé de passer par l'étape ou je sauvegarde une premiere miniature

Posté : 15 nov. 2008, 21:37
par djtec
En faites là avec ton script tu évite une redimenssion si elle existe mais tu recrée le fond à chaque affichage.

Quand je te disant de fusionner les scripts c'était que tes deux scripts ne devenaient plus qu'un. Comme ça ta miniature contiendra déjà ton fond.

Explication:

Si l'image existe je l'affiche direct et si elle n'existe pas je la crée.

En code celà donne:
$filename = "photos/mini_".$photo; 

if (file_exists($filename)) // Si l'image existe
{ 
	$source = "photos/".$photo;  
	
    $ImageChoisie = imagecreatefromjpeg($source);  
	
	$largeur = imagesx($ImageChoisie);
	$hauteur = imagesy($ImageChoisie);
	
	$NouvelleImage = imagecreatetruecolor($largeur , $hauteur) or die ("Erreur");  

	imagejpeg ($NouvelleImage, '', 80);  
}    
else // Et si elle n'existe pas je la crée
{ 
	 // La tu met tu script complet
}

EDIT:

Pour la quailté ne met pas 100 met 80 maxi.

Voici ce que m'as dit AB a ce propos: http://www.phpfrance.com/forums/voir_re ... php#262847

Posté : 15 nov. 2008, 21:50
par sylvaing26
je ne voie pas par ou commencer, ce que je garde, ce que j'enlève

Posté : 16 nov. 2008, 02:27
par djtec
Déjà il faut que tu redimenssionne ta première image.

Puis au lieu de la sauvegarder avec la fonction imagejpeg() tu la récupère puis tu la colle par dessus l'autre et la tu sauvgarde le tout.