Papilou
2007-11-23 13:29:15 UTC
Bonjour à tous,
J'utilise GD2 afin de permettre le téléchargement de photos jpg sur un site.
Pour que ces photos soient visibles en vignette j'utilise les instructions
de GD2 dont voici le code ci dessous.
Les images sont souvent de très grosse taille, 7 millions de pixels, par
exemple.
J'ai deux problèmes :
1/ la qualité de la vignette est vraiment très mauvaise.
2/ On ne dispose que de 8MO de mémoire sur le serveur pour travailler sur la
photo, et parfois ce n'est pas suffisant.
Pouvez-vous me dire si d'autres systèmes existent, ou comment améliorer mes
images.
Merci à vous
Code :
<?
$compnom="basket";
$photo = $_POST['photo'];
$photodir = '../../inclure/';
$phototype = $_FILES['pdf']['type'];
$photodest =$photo."_".$compnom.".jpg";
if ($phototype=="image/pjpeg")
{
if (move_uploaded_file($_FILES["pdf"]["tmp_name"],$photodir.$photodest))
{
$img_src= $photodir.$photodest;
$img_dest= $photodir."mini_".$photodest;
// Lit les dimensions de l'image
$size = GetImageSize($img_src);
$src_w = $size[0]; $src_h = $size[1];
$dst_w=200;
$dst_h =$dst_w*($src_w/$src_h);
// Teste les dimensions tenant dans la zone
$test_h = round(($dst_w / $src_w) * $src_h);
$test_w = round(($dst_h / $src_h) * $src_w);
// Si Height final non précisé (0)
if(!$dst_h) $dst_h = $test_h;
// Sinon si Width final non précisé (0)
elseif(!$dst_w) $dst_w = $test_w;
// Sinon teste quel redimensionnement tient dans la zone
elseif($test_h>$dst_h) $dst_w = $test_w;
else $dst_h = $test_h;
// Crée une image vierge aux bonnes dimensions
$dst_im = ImageCreatetruecolor($dst_w,$dst_h);
// Copie dedans l'image initiale redimensionnée
$src_im = ImageCreateFromJpeg($img_src);
ImageCopyResized($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
// Sauve la nouvelle image
ImageJpeg($dst_im,$img_dest,100);
// Détruis les tampons
ImageDestroy($dst_im);
ImageDestroy($src_im);
header ("location:../message.php?message=Votre photo est téléchargée");
break;
}
}
else
{
Header("location:../message.php?message=Votre photo n'est pas une image
JPG"); }
break;
?>
J'utilise GD2 afin de permettre le téléchargement de photos jpg sur un site.
Pour que ces photos soient visibles en vignette j'utilise les instructions
de GD2 dont voici le code ci dessous.
Les images sont souvent de très grosse taille, 7 millions de pixels, par
exemple.
J'ai deux problèmes :
1/ la qualité de la vignette est vraiment très mauvaise.
2/ On ne dispose que de 8MO de mémoire sur le serveur pour travailler sur la
photo, et parfois ce n'est pas suffisant.
Pouvez-vous me dire si d'autres systèmes existent, ou comment améliorer mes
images.
Merci à vous
Code :
<?
$compnom="basket";
$photo = $_POST['photo'];
$photodir = '../../inclure/';
$phototype = $_FILES['pdf']['type'];
$photodest =$photo."_".$compnom.".jpg";
if ($phototype=="image/pjpeg")
{
if (move_uploaded_file($_FILES["pdf"]["tmp_name"],$photodir.$photodest))
{
$img_src= $photodir.$photodest;
$img_dest= $photodir."mini_".$photodest;
// Lit les dimensions de l'image
$size = GetImageSize($img_src);
$src_w = $size[0]; $src_h = $size[1];
$dst_w=200;
$dst_h =$dst_w*($src_w/$src_h);
// Teste les dimensions tenant dans la zone
$test_h = round(($dst_w / $src_w) * $src_h);
$test_w = round(($dst_h / $src_h) * $src_w);
// Si Height final non précisé (0)
if(!$dst_h) $dst_h = $test_h;
// Sinon si Width final non précisé (0)
elseif(!$dst_w) $dst_w = $test_w;
// Sinon teste quel redimensionnement tient dans la zone
elseif($test_h>$dst_h) $dst_w = $test_w;
else $dst_h = $test_h;
// Crée une image vierge aux bonnes dimensions
$dst_im = ImageCreatetruecolor($dst_w,$dst_h);
// Copie dedans l'image initiale redimensionnée
$src_im = ImageCreateFromJpeg($img_src);
ImageCopyResized($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
// Sauve la nouvelle image
ImageJpeg($dst_im,$img_dest,100);
// Détruis les tampons
ImageDestroy($dst_im);
ImageDestroy($src_im);
header ("location:../message.php?message=Votre photo est téléchargée");
break;
}
}
else
{
Header("location:../message.php?message=Votre photo n'est pas une image
JPG"); }
break;
?>