0/5 (6 avis)
Snippet vu 15 188 fois - Téléchargée 24 fois
function do_image($src, $dest, $size, $show, $del=1) { // Extension du fichier $ext = strtolower( substr( strrchr( $src, '.' ), 1 ) ); // Si l'extension est reconnue if( !in_array( $ext, array( 'jpg', 'jpeg', 'gif', 'png' ) ) ) ) { return FALSE; } // Propriété du fichier list( $width, $height, $type, $attr ) = getimagesize($src); // Contrôle du type d'image if( !in_array( $type, array( 1,2,3 ) ) ) { if( $del == 1 ) { unlink( $src ); } return FALSE; } // Création d'une images a partir de l'original switch( $type ) { case 1: $tmp = imagecreatefromgif($src); break; case 2: $tmp = imagecreatefromjpeg($src); break; case 3: $tmp = imagecreatefrompng($src); break; default : return FALSE; } // Infos des taillles maximum $size = empty( $size ) || strpos( strtolower( $size ), 'x' ) === FALSE ? 100x100 : $size; list( $max_width, $max_height ) = explode('x', $size); // Calcul des tailles proportionnelles if( $width > $max_width || $height > $max_height ) { if( $width >= $height ) { if( $width > $max_width ) { $width_img = $max_width; $propB = $width/$width_img; $height_img = floor($height/$propB); } if( $height_img > $max_height ) { $height_img = $max_height; $propB = $height/$height_img; $width_img = floor($width/$propB); } } else { if( $height > $max_height ) { $height_img = $max_height; $propB = $height/$height_img; $width_img = floor($width/$propB); } if( $width_img > $max_width ) { $width_img = $max_width; $propB = $width/$width_img; $height_img = floor($height/$propB); } } } else { $width_img = $width; $height_img = $height; } // Création de l'image trueColor $img = imagecreatetruecolor($width_img, $height_img); // Copie d'un contenue vers un autre, rééchantillonnage if( imagecopyresampled($img, $tmp, 0, 0, 0, 0, $width_img, $height_img, $width, $height) !== false ) { // Enregistrement ou affichage if( $show != 1 ) { switch( $type ) { case 1 : imagegif($img, $dest); break; case 2 : imagejpeg($img, $dest, 100); break; case 3 : imagepng($img, $dest); break; default: return FALSE; } } else { @header("Content-type: ". mime_content_type( $src ) ); switch( $type ) { case 1 : imagegif($img); exit; break; case 2 : imagejpeg($img, '', 100); exit; break; case 3 : imagepng($img); exit; break; default: return FALSE; } } } // On supprime $del est égal à 1 if( $del == 1 ) unlink($src); // Suppression des variables unset($img, $tmp, $src); }
13 sept. 2007 à 18:21
j'ai télèchargé le script pour voir, mais il y a une erreur à la ligne :
$size empty( $size ) || strpos( strtolower( $size ), 'x' ) FALSE ? 100x100 : $size;
@+
20 déc. 2006 à 19:29
20 déc. 2006 à 19:27
// Citation
D'ailleur tu as une petit erreur dans cette même condition qui ne renvoie false que si $del == 1..
Merci pour l'interrogation du type qui ne renvoie FALSE que si $del est égal à 1, je n'avais pas remarqué.
// Citation
Tu fais deux fois la vérification de l'image... une fois par rapport à l'extension et une seconde fois pas rapport au type retourné par getimagesize()... c'est inutile le second test suffit... et plutot que de faire une condition à part tu pourrais faire... vu que tu utilise un switch...
Oui je fais 2 fois le contrôle du type de l'image, une fois par l'extension et une fois par le type même de l'image, je trouve nécessaire en cas de problème de savoir où chercher, c'est totalement volontaire !
// Citation
Sinon je trouve que l'utilisation de mime_content_type() n'est pas justifiée et limite la portabilité du script pour pas grand chose... autant faire...
Pour les headers c'est un petit détail je trouve mais je prend note.
// Citation
par contre il pourrait être bien de rajouter...
if(!empty($show) && headers_sent())
return false;
Par contre je ne comprends pas pourquoi contrôler que les headers sont envoyés vu que c'est un enregistrement ? Cela peut-être fait avant ou après les headers envoyés
// Citation
Utilise empty() plutot que $maVar == 1 ou $maVar != 1
Tu me dis utilise plustot cette fonction, j'ai eu pas mal d'erreur du à cette fonction que je n'apprècie pas beaucoup et j'ai remarqué que d'autres sources contrôle toujours avec une comparaison ($maVar == 1 | $maVar !=1 ) et la fonction empty() mais jamais seul. Enfin cela reste un avis personnel peut-etre.
// Citation
Pour finir ton unset($img, $tmp, $src); à la fin est totalement inutile vu que les variables sont locales php les supprime automatiquement à la fin de l'éxécution de la fonction... .. .
Ca c'est du folklore ! C'est vrai mais j'aime bien supprimer ce que je fait une fois terminé, c'est une assurance qui ne sert à rien sûrement.
Merci pour ta critique très objectives
18 déc. 2006 à 10:26
if(!empty($del)) et non if(!empty($del) et il faut virer le...
# @header("Content-type: ". mime_content_type( $src ) );
@ tchaOo°
18 déc. 2006 à 10:23
Sinon le in_array()/explode est un peu inutile autant faire...
if(!in_array($type, array(1,2,3)))
voir même...
if($type > 3)
{
if(!empty($del)
unlink($src);
return false;
}
D'ailleur tu as une petit erreur dans cette même condition qui ne renvoie false que si $del == 1...
Tu fais deux fois la vérification de l'image... une fois par rapport à l'extension et une seconde fois pas rapport au type retourné par getimagesize()... c'est inutile le second test suffit... et plutot que de faire une condition à part tu pourrais faire... vu que tu utilise un switch...
switch($type)
{
case 1: $tmp = imagecreatefromgif($src); break;
case 2: $tmp = imagecreatefromjpeg($src); break;
case 3: $tmp = imagecreatefrompng($src); break;
default:
if(!empty($del)
unlink($src);
return false;
}
Sinon je trouve que l'utilisation de mime_content_type() n'est pas justifiée et limite la portabilité du script pour pas grand chose... autant faire...
# @header("Content-type: ". mime_content_type( $src ) );
switch($type)
{
case 1:
header('Content-type: image/gif');
imagegif($img);
exit();
break;
case 2:
header('Content-type: image/jpeg');
imagejpeg($img, '', 100);
exit();
break;
case 3:
header('Content-type: image/png');
imagepng($img);
exit();
break;
}
par contre il pourrait être bien de rajouter...
if(!empty($show) && headers_sent())
return false;
Afin de vérifier si les header sont déja envoyé et si de ce fait il sera possible d'afficher l'image ou non... .. .
Utilise empty() plutot que $maVar == 1 ou $maVar != 1
Pour finir ton unset($img, $tmp, $src); à la fin est totalement inutile vu que les variables sont locales php les supprime automatiquement à la fin de l'éxécution de la fonction... .. .
Voila dans les grandes lignes... .. .
@ tchaOo°
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.