IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] Redimensionnement d'image uploader


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 616
    Points : 177
    Points
    177
    Par défaut [Upload] Redimensionnement d'image uploader
    Bonjour

    je suis sur ce script depuis un bon moment
    afin de le faire fonctionner comme je le veux, c'est dire :
    uploader une image et la redimmensionner
    avec ce script l'image uploadé garde sa taille originale sur le serveur (ce que je ne veux pas)
    A l'affichage pas de probleme, elle s'afffiche bien aux dimensions voulue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    if($_GET['pic']){
    	$img = new img('upload/'.$_GET['pic']);
    	//$destination = 'upload/'.$_GET['pic'];
    	//$img->img($destination);
    	$img->resize();
    	$img->show();
    }
     
    class img {
     
    	var $image = '';
    	var $temp = '';
     
    	function img($sourceFile){
    		if(file_exists($sourceFile)){
    			$this->image = ImageCreateFromJPEG($sourceFile);
    		} else {
    			$this->errorHandler();
    		}
    		return;
    	}
     
    	function resize($width = 220, $height = 135, $aspectradio = true){
    		$o_wd = imagesx($this->image);
    		$o_ht = imagesy($this->image);
    		if(isset($aspectradio)&&$aspectradio) {
    			$w = round($o_wd * $height / $o_ht);
    			$h = round($o_ht * $width / $o_wd);
    			if(($height-$h)<($width-$w)){
    				$width =& $w;
    			} else {
    				$height =& $h;
    			}
    		}
    		$this->temp = imageCreateTrueColor($width,$height);
    		imageCopyResampled($this->temp, $this->image,
    		0, 0, 0, 0, $width, $height, $o_wd, $o_ht);
    		//imagejpeg($this->temp, $destination);
    		$this->sync();
    		return;
    	}
     
    	function sync(){
    		$this->image =& $this->temp;
    		unset($this->temp);
    		$this->temp = '';
    		return;
    	}
     
    	function show(){
    		$this->_sendHeader();
    		ImageJPEG($this->image);
    		return;
    	}
     
    	function _sendHeader(){
    		header('Content-Type: image/jpeg');
    	}
     
    	function errorHandler(){
    		echo "error";
    		exit();
    	}
     
    	function store($file){
    		ImageJPEG($this->image,$file);
    		return;
    	}
     
    	function watermark($pngImage, $left = 0, $top = 0){
    		ImageAlphaBlending($this->image, true);
    		$layer = ImageCreateFromPNG($pngImage); 
    		$logoW = ImageSX($layer); 
    		$logoH = ImageSY($layer); 
    		ImageCopy($this->image, $layer, $left, $top, 0, 0, $logoW, $logoH); 
    	}
    }
    // en commentaire : tests non concluants

    Merci de votre aide

  2. #2
    Membre confirmé Avatar de mathieugamin
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 572
    Points : 627
    Points
    627
    Par défaut
    Salut
    Je crois que pour ça tu peux t'orienter vers la librairie GD...

    Regarde dans les cours PHP :

    N'oublie pas si c'est la solution que tu cherchais

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 616
    Points : 177
    Points
    177
    Par défaut
    j'ai bien regardé la librairie GD
    et je pense que toutes les étapes de redimentionnement on bien été effectuées dans la class...
    mais la taille reste inchangée...
    c'est qqchose m'echappe..

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Votre méthode store semble déjà gérer l'enregistrement de l'image redimensionnée sur le disque or vous ne l'utilisez pas. Ensuite, la variable $destination (méthode resize) n'existe pas dans la portée de votre classe et/ou méthode alors que celle-ci existe dans le contexte général/normal. Si vous tenez à garder vos modifications il vous faut donc rajouter un paramètre à la méthode ou bien déclarer un attribut supplémentaire à la classe qui sera initialisé par le constructeur.


    Julp.

  5. #5
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Février 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 21
    Points : 31
    Points
    31
    Par défaut
    Pensez à vérifier les valeurs de retour des fonctions

    Essaye d'afficher $this->temp a la fin de img::resize (directement dans la fonction de classe, pas en appel derrière) juste après le copyresample, avant le sync et quitte direct après, voir si là ça marche (si oui, l'erreur vient de sync).
    En gros le code a la fin de resize deviendrait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (imageCopyResampled($this->temp, $this->image,
    0, 0, 0, 0, $width, $height, $o_wd, $o_ht)) {
    ImageJPEG($this->temp);
    } else {
    die(posix_strerror(posix_get_last_error()));
    }
    exit;
    //imagejpeg($this->temp, $destination);
    //$this->sync();
    return;

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 616
    Points : 177
    Points
    177
    Par défaut
    Si vous tenez à garder vos modifications il vous faut donc rajouter un paramètre à la méthode ou bien déclarer un attribut supplémentaire à la classe qui sera initialisé par le constructeur.
    Dans la théorie, je vois ce que vous voulez dire
    mais dans la pratique je n'y arrive pas

    je ne suis pas tres POO ...

    néanmoins j'ai essayé ça mais l'image garde toujours sa taille originale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		$this->temp = imagecreatetruecolor($width,$height);
    		imagecopyresampled($this->temp, $this->image,
    		0, 0, 0, 0, $width, $height, $o_wd, $o_ht);
    		imagejpeg($this->image,$this->temp);
    		$this->sync();
    		return;
    ******************************************************
    le test suivant n'a rien donné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (imageCopyResampled($this->temp, $this->image,
    0, 0, 0, 0, $width, $height, $o_wd, $o_ht)) {
    ImageJPEG($this->temp);
    } else {
    die(posix_strerror(posix_get_last_error()));
    }
    exit;

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Je vais aller un peu plus loin alors dans mon explication :
    Solution 1 : faire appel à la méthode store :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if($_GET['pic']){
    	$img = new img('upload/'.$_GET['pic']);
    	$destination = 'upload/'.$_GET['pic'];
    	$img->resize();
    	$img->show();
    	$img->store($destination);
    }
    Solution 2 : modifier la méthode pour intégrer la "destination"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    	function resize($destination = '', $width = 220, $height = 135, $aspectradio = true) {
    		$o_wd = imagesx($this->image);
    		$o_ht = imagesy($this->image);
    		if(isset($aspectradio)&&$aspectradio) { # le test isset n'est pas utile ici puisque cette variable sera systématiquement définie
    			$w = round($o_wd * $height / $o_ht);
    			$h = round($o_ht * $width / $o_wd);
    			if(($height-$h)<($width-$w)){
    				$width =& $w;
    			} else {
    				$height =& $h;
    			}
    		}
    		$this->temp = imageCreateTrueColor($width,$height);
    		imageCopyResampled($this->temp, $this->image,
    		0, 0, 0, 0, $width, $height, $o_wd, $o_ht);
    		if (!empty($destination)) {
    			ImageJPEG($this->image, $destination);
    		}
    		$this->sync();
    		return; # strictement inutile
    	}
    Et changer l'appel en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if($_GET['pic']) {
    	$img = new img('upload/'.$_GET['pic']);
    	$destination = 'upload/'.$_GET['pic'];
    	$img->resize($destination);
    	$img->show();
    }

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 616
    Points : 177
    Points
    177
    Par défaut
    merci pour tout
    ça fonctionne maintenant comme je veux

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redimensionner une image uploadée
    Par saphi dans le forum Langage
    Réponses: 8
    Dernier message: 10/07/2009, 14h18
  2. Redimensionnement d'images uploadées limité à 600ko ?
    Par lenouvdu44 dans le forum Langage
    Réponses: 4
    Dernier message: 18/09/2008, 17h42
  3. [Upload] Redimensionner une image après upload
    Par putubudiarta dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2007, 12h32
  4. [Image]upload d'une image
    Par leloup84 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/03/2006, 15h29
  5. [Upload] Renommer une image uploadée
    Par Empty_body dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2006, 06h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo