Flachy Joe
Messages postés
2103
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
21 novembre 2023
1
6 avril 2007 à 19:48
Voila un script PHP qui fait exactement ce que dis Roro, mais avec la bibliothèque GD :
<?php
/*
Script de redimensionnment d'image.
Paramètres :
file : URL de l'image à redimensionner
maxwidth, maxheight : Taille maximale de l'image.
minwidth, minheight : Taille minimale de l'image.
portion : (booleen) Rogne pour atteindre maxwidth ET maxheight
Redimensionne l'image de manière à ce que ses dimensions soit comprise entre les tailles minimales et maximales. Le fichier source n'est pas modifié.
Utilisation typique : affichage d'une miniature de photo. Les données transmises au client sont réduites.
Exemple :
*/
// Attention à ne pas envoyer de texte : texte + image = BUG
error_reporting(0);
//Paramètres
$filename = $_GET['file'];
$maxwidth = $_GET['maxwidth'];
$maxheight = $_GET['maxheight'];
$minwidth = $_GET['minwidth'];
$minheight = $_GET['minheight'];
$portion = $_GET['portion'];
//Existence du fichier
if (!file_exists($filename)){
header('Content-type: text/html');
echo 'Fichier Introuvable !';
exit;
}
//Pour renvoyer l'image source
function sendSource($filename){
readfile($filename);
exit;
}
// Mesure des dimensions
$size = getimagesize($filename);
//Vérification des dimensions
$width = $size[0];
$height = $size[1];
if (!isset($_GET['maxwidth']))
$maxwidth = $width;
if (!isset($_GET['maxheight']))
$maxheight = $height;
//Pas de changement de type...
header("Content-type: {$size['mime']}");
//Présence de l'extension GD, IMG_JPEG n'est défini que si elle est présente.
if (!IMG_JPEG)
sendSource($filename);
//Détermine les fonctions correspondant au type
switch ($size[2]){
case IMG_GIF:
$fctImageCreate = imagecreatefromgif;
$fctImage = imagegif;
break;
case IMG_JPEG:
$fctImageCreate = imagecreatefromjpeg;
$fctImage = imagejpeg;
break;
case IMG_PNG:
$fctImageCreate = imagecreatefrompng;
$fctImage = imagepng;
break;
case IMG_WBMP:
$fctImageCreate = imagecreatefromwbmp;
$fctImage = imagewbmp;
break;
case IMG_XBM:
$fctImageCreate = imagecreatefromxbm;
$fctImage = imagexbm;
break;
default:
//Type non géré
sendSource($filename);
}
//Chargement
$source = $fctImageCreate($filename);
if ($portion){
//Change d'echelle et rogne
if ($width > $maxwidth)
$scale = $maxwidth/$width;
if ($height > $maxheight)
$scale = max($scale, $maxheight/$height);
if ($width < $minwidth)
$scale = $minwidth/$width;
if ($height < $minheight)
$scale = max($scale, $minheight/$height);
//Nouvelles dimensions
$newwidth = $scale * $width;
$newheight = $scale * $height;
//Image temporaire
$tmp = imagecreatetruecolor($newwidth, $newheight);
// Redimensionnement
imagecopyresampled($tmp, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//Nouvelle image
$thumb = imagecreatetruecolor(min($newwidth,$maxwidth), min($newheight,$maxheight));
//Rognage
if ($newheight > $maxheight){
$delta = $newheight - $maxheight;
imagecopy($thumb,$tmp, 0,0,0,$delta/2,$newwidth,$maxheight);
}elseif ($newwidth > $maxwidth){
$delta = $newwidth - $maxwidth;
imagecopy($thumb,$tmp,0,0,$delta/2,0,$maxwidth,$newheight);
}else{
$thumb = $tmp;
}
}else{
//Changement d'echelle
if ($width > $maxwidth)
$scale = $maxwidth/$width;
if ($height > $maxheight)
$scale = min($scale, $maxheight/$height);
if ($width < $minwidth)
$scale = $minwidth/$width;
if ($height < $minheight)
$scale = max($scale, $minheight/$height);
if ($scale == 1)
sendSource($filename);
//Nouvelles dimensions
$newwidth = $scale * $width;
$newheight = $scale * $height;
//Nouvelle image
$thumb = imagecreatetruecolor($newwidth, $newheight);
// Redimensionnement
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
}
//Affichage
$fctImage($thumb);
?>
Flachy Joe