Salve sto provando ad usare questa funzione per fare in modo che il ridimensionamento delle immagini caricate sul mio sito sia PROPORZIONALE.
Codice PHP:
<?
function fnCreaThumbnail($sOrigine, $sDestinazione, $sMaxWidth=0, $sMaxHeight=0)
{
/*
* Verifica l'esistenza dell'immagine d'origine e, se presente, ne determina
* la tipologia
*/
$sImgInfo = @getimagesize($sOrigine);
switch($sImgInfo[2])
{
case 1: $sType = IMG_GIF; break;
case 2: $sType = IMG_JPG; break;
case 3: $sType = IMG_PNG; break;
case 4: $sType = IMG_WBMP; break;
default: return $sOrigine; break;
}
switch($sType)
{
case IMG_GIF:
if (!function_exists('imagecreatefromgif')) return $sOrigine;
$srcImage = @imagecreatefromgif($sOrigine);
break;
case IMG_JPG:
if (!function_exists('imagecreatefromjpeg')) return $sOrigine;
$srcImage = @imagecreatefromjpeg($sOrigine);
break;
case IMG_PNG:
if (!function_exists('imagecreatefrompng')) return $sOrigine;
$srcImage = @imagecreatefrompng($sOrigine);
break;
case IMG_WBMP:
if (!function_exists('imagecreatefromwbmp')) return $sOrigine;
$srcImage = @imagecreatefromwbmp($sOrigine);
break;
default: return $sOrigine;
}
if($srcImage)
{
/* Recupera la dimensione in pixel dell'immagine d'origine */
$srcWidth = $sImgInfo[0];
$srcHeight = $sImgInfo[1];
/*
* E imposta a zero quelle di destinazione o alla dimensione della
* sorgente se non è limitata
*/
$sNewWidth = ($sMaxWidth == 0 ? $srcWidth : 0);
$sNewHeight = ($sMaxHeight == 0 ? $srcHeight : 0);
/* Calcola il rapporto di proporzione */
$sPropW = $sNewWidth / $srcWidth;
$sPropH = $sNewHeight / $srcHeight;
/*
* Quindi procede al controllo per determinare se una (o entrambe) le
* dimensioni eccedono quelle massime relative.
* Se una sola eccede quella massima relativa questa verrà massimizzata
* nonché, l'altra dimensione, ricalcolata onde mantenere le proporzioni
* corrette.
* Se entrambe le dimensioni eccedono i loro massimi, viene determinato
* quale tra le due è la maggiore e viene ricalcolata l'altra.
*/
if ($sPropW < 1 && $sPropW <= $sPropH)
{
/*
* Vi è limite alla larghezza massima, l'immagine d'origine eccede
* tale limite e quest'ultima è anche la dimensione più grande (o
* eguale) tra larghezza ed altezza.
*/
$sNewWidth = $sMaxWidth;
}
if ($sPropH < 1 && $sPropH <= $sPropW)
{
/*
* Vi è limite all'altezza massima, l'immagine d'origine eccede
* tale limite e quest'ultima è anche la dimensione più grande (o
* eguale) tra larghezza ed altezza.
*/
$sNewHeight = $sMaxHeight;
}
/*
* A questo punto, se una delle due nuove dimensioni è ancora pari a
* zero, significa che quest'ultima deve essere ricalcolata in base
* alla sua antagonista per poter rispettare le proporzioni.
*/
if ($sNewWidth > 0 && $sNewHeight == 0)
{
/* Ricalcola l'altezza */
$sRatioWidth = $srcWidth / $sNewWidth;
$sNewHeight = $srcHeight / $sRatioWidth;
}
if ($sNewHeight > 0 && $sNewWidth == 0)
{
/* Ricalcola la larghezza */
$sRatioHeight = $srcHeight / $sNewHeight;
$sNewWidth = $srcWidth / $sRatioHeight;
}
if ($sNewWidth == 0 && $sNewHeight == 0)
{
$sNewWidth = $srcWidth;
$sNewHeight = $srcHeight;
}
/* Procede quindi alla creazione effettiva della thumbnail */
if (!function_exists("imagecreatetruecolor"))
$sDestImage = @imagecreate($sNewWidth, $sNewHeight);
else
$sDestImage = @imagecreatetruecolor($sNewWidth, $sNewHeight);
imagecopyresized($sDestImage, $srcImage, 0, 0, 0, 0, $sNewWidth, $sNewHeight, $srcWidth, $srcHeight);
switch($sType)
{
case IMG_GIF: @imagegif($sDestImage, $sDestinazione); break;
case IMG_JPG: @imagejpeg($sDestImage, $sDestinazione); break;
case IMG_PNG: @imagepng($sDestImage, $sDestinazione); break;
case IMG_WBMP: @imagewbmp($sDestImage, $sDestinazione); break;
}
/* Libera la memoria */
@imagedestroy($srcImage);
@imagedestroy($sDestImage);
return $sDestinazione;
}
else
{
return $sOrigine;
}
}
?>
la pagina upload_categoria.php conmtiene il seguente codice attraverso il quale richiamo la funzione impostata nel file gd.php
Codice PHP:
<?
if ((isset($_POST["act"])) AND ($_POST["act"] == "upload") ){
if(isset($_FILES["file"]["size"])){
$id = $_POST["id"];
$file =$_FILES["file"]["name"];
$arr_ext = array("gif","jpg","jpeg");
list($ok_upload,$end_result,$file_name) = uploadFile("../public/servizi/".$id."/foto/",$_FILES["file"],$arr_ext);
if($ok_upload){
include("../include/gd.php");
$origine = "../public/servizi/".$id."/foto/".$file; // percorso al file dell'immagine
$destinazione = "../public/servizi/".$id."/thumb/".$file; // directory di salvataggio delle miniature create
/* Dimensione finale massima: */
$thumb = fnCreaThumbnail($origine, $destinazione, 200,200);
echo "<script>self.location.href='servizi_foto.php?id=".$id."';</script>";
stampa_msg();
}
}
}
?>
Il problem rigurada la creazione dell'immagine proporzionata in pratica il resize procede ma le dimensioni proporzionate non le ottengo . dove Sbaglio?