8791 sujets

Développement web côté serveur, CMS

bonjour,
j'utilise EasyGallery pour un ami qui voudrait incorporer des images en png et gif.
malheureusement les miniature ne sorte que si se sont des jpg.
la function:
function createthumb($name,$file,$maxsize)
{
$maxsize += 8;
list($width, $height) = getimagesize("$name/$file");
$width = min($width, $height);
$tn = imagecreatetruecolor($maxsize, $maxsize);
$image = imagecreatefromjpeg("$name/$file");
imagecopyresampled($tn, $image, 0, 0, 0, 0, $maxsize, $maxsize, $width, $width);
if(!is_dir("$name/thumbnails"))
{
mkdir ("$name/thumbnails", 0777);
}
imagejpeg($tn, "$name/thumbnails/tn_$file", 90);
return true;
}
j'ai bien vu le imagecreatefromjpeg et je sais qu'il existe imagecreatefromgif et imagecreatefrompng.
faut faire d'autre function ou mettre une boucle?
merci pour vos reponse.
Salut,
J'utilise cette fonction sur une dizaine de sites pour du jpg, png et gif,

il te faut fctredimimage.php que voici

<?php
// -----------------------------------------------------------------------------------------------------
// fonction de REDIMENSIONNEMENT physique "PROPORTIONNEL" et Enregistrement
// -----------------------------------------------------------------------------------------------------
// retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
// -----------------------------------------------------------------------------------------------------
// La FONCTION : fctredimimage ($W_max, $H_max, $rep_Dst, $img_Dst, $rep_Src, $img_Src)
// Les parametres :
// - $W_max : LARGEUR maxi finale --> ou 0
// - $H_max : HAUTEUR maxi finale --> ou 0
// - $rep_Dst : repertoire de l image de Destination (deprotégé) --> ou '' (meme repertoire)
// - $img_Dst : NOM de l image de Destination --> ou '' (meme nom que l image Source)
// - $rep_Src : repertoire de l image Source (deprotégé)
// - $img_Src : NOM de l image Source
// -----------------------------------------------------------------------------------------------------
// 3 options :
// A- si $W_max != 0 et $H_max != 0 : a LARGEUR maxi ET HAUTEUR maxi fixes
// B- si $H_max != 0 et $W_max == 0 : image finale a HAUTEUR maxi fixe (largeur auto)
// C- si $W_max == 0 et $H_max != 0 : image finale a LARGEUR maxi fixe (hauteur auto)
// Si l'image Source est plus petite que les dimensions indiquees : PAS de redimensionnement.
// -----------------------------------------------------------------------------------------------------
// $rep_Dst : il faut s'assurer que les droits en écriture ont été donnés au dossier (chmod)
// - si $rep_Dst = '' : $rep_Dst = $rep_Src (meme repertoire que l image Source)
// - si $img_Dst = '' : $img_Dst = $img_Src (meme nom que l image Source)
// - si $rep_Dst='' ET $img_Dst='' : on ecrase (remplace) l image source !
// -----------------------------------------------------------------------------------------------------
// NB : $img_Dst et $img_Src doivent avoir la meme extension (meme type mime) !
// Extensions acceptees (traitees ici) : .jpg , .jpeg , .png
// Pour ajouter d autres extensions : voir la bibliotheque GD ou ImageMagick
// (GD) NE fonctionne PAS avec les GIF ANIMES ou a fond transparent !
// -----------------------------------------------------------------------------------------------------
// UTILISATION (exemple) :
// $redimOK = fctredimimage(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
// if ($redimOK == 1) { echo 'Redimensionnement OK !'; }
// -----------------------------------------------------------------------------------------------------
function fctredimimage($W_max, $H_max, $rep_Dst, $img_Dst, $rep_Src, $img_Src) {
// ------------------------------------------------------------------
$condition = 0;
// Si certains parametres ont pour valeur '' :
if ($rep_Dst == '') { $rep_Dst = $rep_Src; } // (meme repertoire)
if ($img_Dst == '') { $img_Dst = $img_Src; } // (meme nom)
// ------------------------------------------------------------------
// si le fichier existe dans le répertoire, on continue...
if (file_exists($rep_Src.$img_Src) && ($W_max!=0 || $H_max!=0)) {
// ----------------------------------------------------------------
// extensions acceptees :
$ExtfichierOK = '" jpg jpeg png"'; // (l espace avant jpg est important)
// extension fichier Source
$tabimage = explode('.',$img_Src);
$extension = $tabimage[sizeof($tabimage)-1]; // dernier element
$extension = strtolower($extension); // on met en minuscule
// ----------------------------------------------------------------
// extension OK ? on continue ...
if (strpos($ExtfichierOK,$extension) != '') {
// -------------------------------------------------------------
// recuperation des dimensions de l image Src
$img_size = getimagesize($rep_Src.$img_Src);
$W_Src = $img_size[0]; // largeur
$H_Src = $img_size[1]; // hauteur
// -------------------------------------------------------------
// condition de redimensionnement et dimensions de l image finale
// -------------------------------------------------------------
// A- LARGEUR ET HAUTEUR maxi fixes
if ($W_max != 0 && $H_max != 0) {
$ratiox = $W_Src / $W_max; // ratio en largeur
$ratioy = $H_Src / $H_max; // ratio en hauteur
$ratio = max($ratiox,$ratioy); // le plus grand
$W = $W_Src/$ratio;
$H = $H_Src/$ratio;
$condition = ($W_Src>$W) || ($W_Src>$H); // 1 si vrai (true)
} // -------------------------------------------------------------
// B- HAUTEUR maxi fixe
if ($W_max == 0 && $H_max != 0) {
$H = $H_max;
$W = $H * ($W_Src / $H_Src);
$condition = $H_Src > $H_max; // 1 si vrai (true)
}
// -------------------------------------------------------------
// C- LARGEUR maxi fixe
if ($W_max != 0 && $H_max == 0) {
$W = $W_max;
$H = $W * ($H_Src / $W_Src);
$condition = $W_Src > $W_max; // 1 si vrai (true)
}
// -------------------------------------------------------------
// on REDIMENSIONNE si la condition est vraie
// -------------------------------------------------------------
// Par defaut :
// Si l'image Source est plus petite que les dimensions indiquees :
// PAS de redimensionnement.
// Mais on peut "forcer" le redimensionnement en ajoutant ici :
// $condition = 1;
if ($condition == 1) {
// ----------------------------------------------------------
// creation de la ressource-image "Src" en fonction de l extension
switch($extension) {
case 'jpg':
case 'jpeg':
$Ress_Src = imagecreatefromjpeg($rep_Src.$img_Src);
break;
case 'png':
$Ress_Src = imagecreatefrompng($rep_Src.$img_Src);
break;
}
// ----------------------------------------------------------
// creation d une ressource-image "Dst" aux dimensions finales
// fond noir (par defaut)
switch($extension) {
case 'jpg':
case 'jpeg':
$Ress_Dst = imagecreatetruecolor($W,$H);
break;
case 'png':
$Ress_Dst = imagecreatetruecolor($W,$H);
// fond transparent (pour les png avec transparence)
imagesavealpha($Ress_Dst, true);
$trans_color = imagecolorallocatealpha($Ress_Dst, 0, 0, 0, 127);
imagefill($Ress_Dst, 0, 0, $trans_color);
break;
}
// ----------------------------------------------------------
// REDIMENSIONNEMENT (copie, redimensionne, re-echantillonne)
imagecopyresampled($Ress_Dst, $Ress_Src, 0, 0, 0, 0, $W, $H, $W_Src, $H_Src);
// ----------------------------------------------------------
// ENREGISTREMENT dans le repertoire (avec la fonction appropriee)
switch ($extension) {
case 'jpg':
case 'jpeg':
imagejpeg ($Ress_Dst, $rep_Dst.$img_Dst);
break;
case 'png':
imagepng ($Ress_Dst, $rep_Dst.$img_Dst);
break;
}
// ----------------------------------------------------------
// liberation des ressources-image
imagedestroy ($Ress_Src);
imagedestroy ($Ress_Dst);
}
// -------------------------------------------------------------
}
}
// -----------------------------------------------------------------------------------------------------
// si le fichier a bien ete cree
if ($condition == 1 && file_exists($rep_Dst.$img_Dst)) { return true; }
else { return false; }
}
// retourne : 1 (vrai) si le redimensionnement et l enregistrement ont bien eu lieu, sinon rien (false)
// -----------------------------------------------------------------------------------------------------
?>
puis cette petite ligne
<?php
// FONCTION de redimensionnement "physique proportionnel"
include("fctredimimage.php");
// --------------------------------------------------------------------------------------
$redimOK = fctredimimage(120,80,'reppicto/','monpicto.jpg','repimage/','monimage.jpg');
if ($redimOK == true) { echo 'Redimensionnement OK !'; }
?>

mon adaptation où le gestionnaire du site peux redimentionner toutes les photos d'un répertoire en choisissant la taille 500, 600 ou 700 px, valeur qui est envoyé à la page par post

<?php
include("fctredimimage.php");
?>

<?php

$size = $_POST['photosize']; ?>
<?php
$album_id = $_GET['id_album'];
$rep_Src = "../userfiles/photos_articles/$album_id/";
// repertoire de Destination
$rep_Dst = "../userfiles/photos_articles/$album_id/";
$ouvredir = opendir($rep_Src);
?>
<?php
// -----------------------------------------------------------------------------------------------------
// pour chaque fichier du repertoire ...
while ($img_Src = readdir($ouvredir)) {
// si le fichier existe
if(is_file($rep_Src.$img_Src)) {
// -------------------------------------------------------------
// CHOIX de redimensionnement : picto de 150 x 100 pixels maxi
// nom du picto : pict-(nom photo)
$img_Dst = ''.$img_Src;
// -------------------------------------------------------------
// REDIMENSIONNEMENT (si les conditions sont correctes)
$RedimOK = fctredimimage($size,0,$rep_Dst, $img_Dst, $rep_Src, $img_Src);
// -------------------------------------------------------------

} // fin si existe
} // fin while
// -----------------------------------------------------------------------------------------------------
// Fermeture du dossier
closedir($ouvredir);
?>

C'est tout et c'est simple Smiley smile
Ce serait bien d'avoir un code comme le demande laurie-anne Smiley decu
facile, vous rééditez et mettez autour du code la balise debut et fin !
Modifié par Christele (09 Feb 2011 - 16:00)