Page 1 sur 1

Upload et redimenssionnement d'images

Posté : 30 oct. 2014, 23:21
par Larker
Bonsoir,

J'ai ajouté un système d'upload sur mon site et je voudrais savoir comment faire en sorte d'uploader toutes les images à la même taille 180px * 270px.
Autre question, est-ce suffisant de réduire la taille de cette manière pour les rendre moins lourdes à charger ou une autre opération est-elle nécessaire pour cela ?

Voici mon code :
<?php
if( isset($_FILES['image']) && $_FILES['image']['error'] == 0)
{
    if( $_FILES['image']['size'] <= 1000000)
    {
    // Testons si l'extension est autorisée
 
            $infosfichier = pathinfo($_FILES['image']['name']);
            $extension_upload = $infosfichier['extension'];
            $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
 
            if (in_array($extension_upload, $extensions_autorisees))
            {  
                $dossier = 'images/upload/';
            $fichier = basename($_FILES['image']['name']);
 
            if(move_uploaded_file($_FILES['image']['tmp_name'], $dossier . $fichier)) //Si TRUE
                {
                    echo ' Upload effectué avec succès !';
                }
                else //Sinon (la fonction renvoie FALSE).
                {
                    echo 'Echec de l\'upload !';
                }
            }
            else
  {
                echo 'Erreur sur extension de fichier';
            }
    }
    else
    {
        echo 'Erreur sur taille fichier';
    }
}  
?>
<div id="bloc">	
 <form method="post" enctype="multipart/form-data">
         <p>
        <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
        <input type="file" name="image"/>
        </p>
        <p>
            <input type="submit" value="Valider"/>
        </p>
    </form>
</div>
Merci d'avance à ceux qui pourront me répondre. ;)

Re: Upload et redimenssionnement d'images

Posté : 30 oct. 2014, 23:45
par Nestecha
https://github.com/maxim/smart_resize_i ... nction.php

J'utilise ça, ça permet ensuite d'avoir simplement à appeler cette fonction :
smart_resize_image($sImage, null, 180, 270, false, $sResizedFile, false, false, 100);

Re: Upload et redimenssionnement d'images

Posté : 31 oct. 2014, 00:35
par Larker
Salut Nestecha, merci de ton aide. ;)

J'ai ajouté ton script mais ça n'a pas l'air de fonctionner et me renvoie une erreur.

Warning: getimagesize(): Filename cannot be empty in /public_html/upload.php on line 15 Warning: Division by zero in /public_html/module-upload.php on line 24 Warning: Division by zero in /public_html/upload.php on line 24
<?php
if(!defined(PROTECTION_FICHIER) && PROTECTION_FICHIER != 'protection_Projet')
{
	header('Location: index.php');
}
 function smart_resize_image($file,
$width = 0,
$height = 0,
$proportional = false,
$output = 'file',
$delete_original = true,
$use_linux_commands = false ) {
if ( $height <= 0 && $width <= 0 ) return false;
# Setting defaults and meta
$info = getimagesize($file);
$image = '';
$final_width = 0;
$final_height = 0;
list($width_old, $height_old) = $info;
# Calculating proportionality
if ($proportional) {
if ($width == 0) $factor = $height/$height_old;
elseif ($height == 0) $factor = $width/$width_old;
else $factor = min( $width / $width_old, $height / $height_old );
$final_width = round( $width_old * $factor );
$final_height = round( $height_old * $factor );
}
else {
$final_width = ( $width <= 0 ) ? $width_old : $width;
$final_height = ( $height <= 0 ) ? $height_old : $height;
}
# Loading image to memory according to type
switch ( $info[2] ) {
case IMAGETYPE_GIF: $image = imagecreatefromgif($file); break;
case IMAGETYPE_JPEG: $image = imagecreatefromjpeg($file); break;
case IMAGETYPE_PNG: $image = imagecreatefrompng($file); break;
default: return false;
}
# This is the resizing/resampling/transparency-preserving magic
$image_resized = imagecreatetruecolor( $final_width, $final_height );
if ( ($info[2] == IMAGETYPE_GIF) || ($info[2] == IMAGETYPE_PNG) ) {
$transparency = imagecolortransparent($image);
if ($transparency >= 0) {
$transparent_color = imagecolorsforindex($image, $trnprt_indx);
$transparency = imagecolorallocate($image_resized, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
imagefill($image_resized, 0, 0, $transparency);
imagecolortransparent($image_resized, $transparency);
}
elseif ($info[2] == IMAGETYPE_PNG) {
imagealphablending($image_resized, false);
$color = imagecolorallocatealpha($image_resized, 0, 0, 0, 127);
imagefill($image_resized, 0, 0, $color);
imagesavealpha($image_resized, true);
}
}
imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $final_width, $final_height, $width_old, $height_old);
# Taking care of original, if needed
if ( $delete_original ) {
if ( $use_linux_commands ) exec('rm '.$file);
else @unlink($file);
}
# Preparing a method of providing result
switch ( strtolower($output) ) {
case 'browser':
$mime = image_type_to_mime_type($info[2]);
header("Content-type: $mime");
$output = NULL;
break;
case 'file':
$output = $file;
break;
case 'return':
return $image_resized;
break;
default:
break;
}
# Writing image according to type to the output destination
switch ( $info[2] ) {
case IMAGETYPE_GIF: imagegif($image_resized, $output); break;
case IMAGETYPE_JPEG: imagejpeg($image_resized, $output); break;
case IMAGETYPE_PNG: imagepng($image_resized, $output); break;
default: return false;
}
return true;
}
if( isset($_FILES['image']) && $_FILES['image']['error'] == 0)
{
    if( $_FILES['image']['size'] <= 1000000)
    {
    // Testons si l'extension est autorisée
 
            $infosfichier = pathinfo($_FILES['image']['name']);
            $extension_upload = $infosfichier['extension'];
            $extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
 
            if (in_array($extension_upload, $extensions_autorisees))
            {  
			smart_resize_image($sImage, null, 180, 270, false, $sResizedFile, false, false, 100);
                $dossier = 'images/upload';
            $fichier = basename($_FILES['image']['name']);
 
            if(move_uploaded_file($_FILES['image']['tmp_name'], $dossier . $fichier)) //Si TRUE
                {
                    echo 'Upload effectué avec succès !';
                }
                else //Sinon (la fonction renvoie FALSE).
                {
                    echo 'Echec de l\'upload !';
                }
            }
            else
  {
                echo 'Erreur sur extension de fichier';
            }
    }
    else
    {
        echo 'Erreur sur taille fichier';
    }
}  
?>
L'upload fonctionne mais ça ne redimensionne pas.

Re: Upload et redimenssionnement d'images

Posté : 31 oct. 2014, 01:55
par Nestecha
Normal t'as écrit ce que je t'ai quoté !
 smart_resize_image($sImage, null, 180, 270, false, $sResizedFile, false, false, 100);
Ca ne risque pas de fonctionner, $sImage exsite pas, $sResizedFile non plus, tu dois créer ces variables ! $sImage ce sera ton image uploadée, $sResizedFile l'image resizée !

Re: Upload et redimenssionnement d'images

Posté : 31 oct. 2014, 19:28
par AB
Salut,

Si t'a des pb tu peux regarder aussi cette classe d'upload et redimensionnement qui est proposée dans un dossier de test prêt à l'emploi.
L'avantage est qu'elle dispose en option de nombreuses fonctions préprogrammées. Par exemple la gestion des erreurs (entre autre les dépassements de configuration serveur), la vérification de fichiers de même nom déjà existants sur le serveur et un éventuel renommage pour éviter l'écrasement, le retour d'information, etc. Il y a bien d'autres options mais j'ai cité celles-ci car elle devraient figurer dans ton script (et dans tout script d'upload en général sinon par exemple en cas de dépassement de configuration serveur non gérée, le visiteur va se retrouver devant une page blanche en guise de toute information).

Une autre solution d'upload ajax/php permet en plus de visualiser les images avant l'upload, un retour d'information en temps réel (progression etc.), de télécharger de très gros fichiers en surpassant les configurations serveur, de faire des téléchargements partiels et des reprises de téléchargement. Disponible aussi dans un dossier de test prêt à l'emploi, elle demande plus de temps pour exploiter toutes les possibilités, car en plus du script php, le script ajax dispose aussi de nombreuses options, ainsi que l'affichage html (styles événementiels).