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 :

function resize image et WaterMark


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 101
    Par défaut function resize image et WaterMark
    Bonjour,

    je suis en train de coder deux function me permettant de ( renommer/redimensionner/appliquer un WaterMark ) sur une image uploader.

    Le renommage fonctionne bien mais par le redimensionnement/WaterMark.

    Voici la parti formulaire post
    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
    // Upload images
    		if (count($_FILES['pic']['tmp_name']))
    		{
    			$ipval = ipval();
    			$uploaderror = 0;
    			$uploadcount = 0;
     
    			foreach ($_FILES['pic']['tmp_name'] as $k=>$tmpfile)
    			{
    				if ($tmpfile) 
    				{
    					$thisfile = array("name"=>$_FILES['pic']['name'][$k],
    						"tmp_name"=>$_FILES['pic']['tmp_name'][$k],
    						"size"=>$_FILES['pic']['size'][$k],
    						"type"=>$_FILES['pic']['type'][$k],
    						"error"=>$_FILES['pic']['error'][$k]);			
     
    					// Check size images
    					if ($_FILES['pic']['size'][$k] > $pic_maxsize*1000)
    					{
    						$uploaderror++;
    					}
    					elseif (!isValidImage($thisfile))
    					{
    						$uploaderror++;
    					}
    					else
    					{
    						$newfile = SaveUploadFile($thisfile, "{$path_escape}{$datadir[adpics]}", $data['adtitle'], TRUE, $images_max_width, $images_max_height);
    						if($newfile)
    						{
    							$sql = "INSERT INTO $t_adpics
    									SET adid = $adid,
    										isevent = '$data[isevent]',
    										picfile = '$newfile'";
    							mysql_query($sql);
     
    							if (mysql_error())
    							{
    								echo "<span class=\"error\">Error uploading $_FILES[pic][name]</span><br>";
    								$uploaderror++;
    							}
    							else
    							{
    								$uploadcount++;
    							}
     
    						}
    						else
    						{
    							$uploaderror++;
    						}
    					}
     
    				}
    				elseif ($_FILES['pic']['name'][$k])
    				{
    					$uploaderror++;
    				}
    			}

    La premiere function qui renomme l'image
    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
    function SaveUploadFile($file, $dir, $title, $resize=TRUE, $maxw=638, $maxh=478, $quality=75) 
    { 
    	if(!$GLOBALS['image_verification']) $resize = FALSE; 
    	if ($file['tmp_name']) 
    	{ 	 
    		$dotpos = strrpos($file['name'], "."); 
     
    		if ($dotpos) $ext = strtolower(substr($file['name'], $dotpos)); 
    		else $ext = ""; 
     
    		$radical = rand(1, 1000);  
     
    		$newname = RemoveBdURLChars($title)."-".$radical . $ext; 
     
    		if ($resize && ($ext==".jpg" || $ext==".jpeg" || $ext==".jfif" || $ext==".png" || $ext==".gif")) $copysuccess = SaveResizedJPG($file['tmp_name'], "$dir/$newname", $ext, $maxw, $maxh, $quality); 
    		else $copysuccess = copy($file['tmp_name'], "$dir/$newname"); 
     
    		if ($copysuccess) 
    			$ret = $newname; 
    		else 
    			return ""; 
     
    		unlink($file['tmp_name']); 
    		return $ret; 
    	} 
    	else 
    	{ 
    		return ""; 
    	} 
    }
    La seconde qui redimentionne et applique le WaterMark (qui est appeler ds la premiere function)
    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
    function SaveResizedJPG($srcfile, $dstfile, $ext, $maxw=638, $maxh=478, $quality=75) 
    { 
    	if($ext==".jpg" || $ext==".jpeg" || $ext==".jfif") 
    	    $imgsrc = imagecreatefromjpeg($srcfile); 
    	elseif(strtolower($ext) == ".png") 
    	    $imgsrc = imagecreatefrompng($srcfile); 
    	elseif(strtolower($ext) == ".gif") 
    	    $imgsrc = imagecreatefromgif($srcfile); 
     
    	$w = $actw = imagesx($imgsrc); 
    	$h = $acth = imagesy($imgsrc); 
     
    	if (!$maxw) $maxw = 638; 
    	if (!$maxh) $maxh = 478; 
    	if (!$quality) $quality = 75; 
     
    	if ($w > $maxw) 
    	{ 
    		$w = $maxw; 
    		$h = round($acth/$actw*$maxw); 
    	} 
    	if ($h > $maxh) 
    	{ 
    		$h = $maxh; 
    		$w = round($actw/$acth*$maxh); 
    	} 
     
    	$imgdest = imagecreatetruecolor($w,$h) or die ("Impossible de crée un flux d'image GD"); 
     
    	$text_color = imagecolorallocate ($imgsrc, 162, 213, 43); 
    	imagestring ($imgsrc, 5, 5, 5, "mon texte", $text_color); 
     
    	imagecopyresampled($imgdest, $imgsrc, 0, 0, 0, 0, $w, $h, $actw, $acth); 
     
    	return imagejpeg($imgdest, $dstfile, $quality);  
    }
    Merci d'avance pour votre aide

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Afin de mieux t'aider, pourrais-tu être plus précis stp ?

    Jusqu'à quelle partie du code ça fonctionne ?
    Qu'obtiens-tu pour l'instant avec ton code ?
    As-tu un message d'erreur ?

    PS : un code COMPLET et CORRECT c'est toujours mieux pour aider les gens Dans ce que tu as donné, il manque une accolade. De plus, on ne peut même pas vérifier si tu as bien mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     enctype="multipart/form-data"
    dans ton form :s


    EDIT : après test de ton code, je dirais que le check des erreurs, ce n'est que pour l'utilisateur... identifier où se trouve le problème dans ton code est d'une grande d'aide !
    $uploaderror devrait contenir un texte plutot qu'une simple incrémentation (un array() est encore mieux dans certains cas, bien que dans le cas d'upload d'image il faudrait sortir immédiatement du code)

  3. #3
    Inactif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 101
    Par défaut
    Comme je disait l'image et bien renommer mais n'est pas redimensionner et le WaterMark ne s'applique pas.

    Je n'ai aucune erreur sinon.

    je pense que c'est ici que ça block
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($resize && ($ext==".jpg" || $ext==".jpeg" || $ext==".jfif" || $ext==".png" || $ext==".gif")) $copysuccess = SaveResizedJPG($file['tmp_name'], "$dir/$newname", $ext, $maxw, $maxh, $quality); 
    		else $copysuccess = copy($file['tmp_name'], "$dir/$newname");
    dans la première function

    edit: oui j'ai bien mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enctype="multipart/form-data"
    code complet: mon code fait 1200 lignes à quoi bon tout balancer

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 101
    Par défaut
    EDIT : après test de ton code, je dirais que le check des erreurs, ce n'est que pour l'utilisateur... identifier où se trouve le problème dans ton code est d'une grande d'aide !
    $uploaderror devrait contenir un texte plutot qu'une simple incrémentation (un array() est encore mieux dans certains cas, bien que dans le cas d'upload d'image il faudrait sortir immédiatement du code)
    J'ai rien compris

  5. #5
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    j'ai réutilisé ton code un peu à la bourrin en modifiant des trucs vite fait et chez moi, ceci marche :

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    <?php
    $GLOBALS['image_verification'] = true;
    // FONCTIONS
    function SaveUploadFile($file, $dir, $title, $resize=TRUE, $maxw=638, $maxh=478, $quality=75) 
    { 
    	if(!$GLOBALS['image_verification']) $resize = FALSE; 
    	if ($file['tmp_name']) 
    	{ 	 
    		$dotpos = strrpos($file['name'], "."); 
     
    		if ($dotpos) $ext = strtolower(substr($file['name'], $dotpos)); 
     
    		$newname = $file['name'];
     
    		if ($resize && ($ext==".jpg" || $ext==".jpeg" || $ext==".jfif" || $ext==".png" || $ext==".gif")) {
    			$copysuccess = SaveResizedJPG($file['tmp_name'], $dir.$newname, $ext, $maxw, $maxh, $quality); 
    		} else {
    			$copysuccess = copy($file['tmp_name'], $dir.$newname); 
    		}
    		if ($copysuccess) 
    			$ret = $newname; 
    		else 
    			return ""; 
     
    		unlink($file['tmp_name']); 
    		return $ret; 
    	} 
    	else 
    	{ 
    		return ""; 
    	} 
    }
     
    function SaveResizedJPG($srcfile, $dstfile, $ext, $maxw=638, $maxh=478, $quality=75) 
    { 
    	if($ext==".jpg" || $ext==".jpeg" || $ext==".jfif") 
    	    $imgsrc = imagecreatefromjpeg($srcfile); 
    	elseif(strtolower($ext) == ".png") 
    	    $imgsrc = imagecreatefrompng($srcfile); 
    	elseif(strtolower($ext) == ".gif") 
    	    $imgsrc = imagecreatefromgif($srcfile); 
     
    	$w = $actw = imagesx($imgsrc); 
    	$h = $acth = imagesy($imgsrc); 
     
    	if (!$maxw) $maxw = 600; 
    	if (!$maxh) $maxh = 300; 
    	if (!$quality) $quality = 75; 
     
    	if ($w > $maxw) 
    	{ 
    		$w = $maxw; 
    		$h = round($acth/$actw*$maxw); 
    	} 
    	if ($h > $maxh) 
    	{ 
    		$h = $maxh; 
    		$w = round($actw/$acth*$maxh); 
    	} 
     
    	$imgdest = imagecreatetruecolor($w,$h) or die ("Impossible de crée un flux d'image GD"); 
     
    	$text_color = imagecolorallocate ($imgsrc, 162, 213, 43); 
    	imagestring ($imgsrc, 5, 5, 5,  "domaine.ext", $text_color); 
     
    	imagecopyresampled($imgdest, $imgsrc, 0, 0, 0, 0, $w, $h, $actw, $acth); 
     
    	if  (imagejpeg($imgdest, $dstfile, $quality)) {
    		echo "resize créé";
    		$ret = true;
    	} else {
    		echo "resize échoué";
    		$ret = false;
    	}
    	return $ret;
    }
     
    // Upload images
    echo "<pre>";
    print_r($_FILES);
    echo "</pre>";
    if (count($_FILES['pic']['tmp_name']))
    {
    	$ipval = $_SERVER['REMOTE_ADDR'];
    	$uploaderror = array();
    	$uploadcount = 0;
    	$pic_maxsize = "1000";
    	$dir = "";
     
    	foreach ($_FILES['pic']['tmp_name'] AS $k=>$tmpfile)
    	{
    		if ($tmpfile) 
    		{
    			$thisfile = array("name"=>$_FILES['pic']['name'][$k],
    				"tmp_name"=>$_FILES['pic']['tmp_name'][$k],
    				"size"=>$_FILES['pic']['size'][$k],
    				"type"=>$_FILES['pic']['type'][$k],
    				"error"=>$_FILES['pic']['error'][$k]);			
     
    			// Check size images
    			if ($_FILES['pic']['size'][$k] > $pic_maxsize*1000)
    			{
    				$uploaderror[] = "IMAGE TROP LOURDE";
    			}
    			else
    			{
    				$newfile = SaveUploadFile($thisfile, $dir, $data['adtitle'], TRUE, $images_max_width, $images_max_height);
    				if(!$newfile) {
    					$uploaderror[] = "ERREUR LORS DE LA COPIE DU FICHIER";
    				} else {
    					echo "fichier sauvegard&eacute; !";
    				}
    			}
     
    		}
    		elseif ($_FILES['pic']['name'][$k])
    		{
    			$uploaderror++;
    		}
    	}
    }
    if (!empty($uploaderror)) {
    	echo "<pre>";
    	print_r($uploaderror);
    	echo "</pre>";
    }
    ?>
    <form method="post" enctype="multipart/form-data">
    <input type="file" name="pic[]" />
    <input type="submit" />
    </form>
    PS : c'est pas propre du tout... :s

  6. #6
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par kitten13 Voir le message
    J'ai rien compris
    je te joins mon script perso à ce post, tu comprendras mieux les return

    Utilisation :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $outilsImage = new _outils_GD2($db); // y'a une DB car je fais des requetes directement dedans mais c'est pas obligatoire évidemment
    $image = $outilsImage->upload_image('fichier', $dest); // "fichier" c'est le nom de l'input
    // exemple : <input type="file" name="fichier" />
    			// Gestion des erreurs
    			if (empty($image['error'])) {
    				// ici il n'y a pas d'erreur, tout s'est bien passé
    			} else {
    				// Contient le message d'erreur (exemple : Fichier trop volumieux)
    				$error = $image['error'];
    			}

    Mon fichier n'est pas non plus le plus propre du monde, il date un peu et pourrait être amélioré (mais ça me fait chier car j'ai en réalité 2 fichiers : un pour libraire GD2 et un pour ImageMagick [je fais un check du quel fonctionne ^^])
    Fichiers attachés Fichiers attachés

  7. #7
    Inactif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 101
    Par défaut
    ok merci j'adapte et je te fait un retour

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

Discussions similaires

  1. [CKEditor] Resize image CKEditor/CKFinder
    Par morganC dans le forum Bibliothèques & Frameworks
    Réponses: 0
    Dernier message: 19/05/2010, 17h22
  2. PHP Class resize image
    Par stefanelle dans le forum Langage
    Réponses: 3
    Dernier message: 19/10/2009, 12h07
  3. Resize image vba
    Par PascalJ dans le forum VBA Access
    Réponses: 7
    Dernier message: 20/03/2009, 16h27
  4. split - function avec image
    Par mimagyc dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 13/05/2008, 22h35
  5. [ImageMagick] Resize image avant l'uppload
    Par phoeniix07 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/05/2006, 16h47

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